Decision Optimization

Decision Optimization

Delivers prescriptive analytics capabilities and decision intelligence to improve decision-making.

 View Only
  • 1.  Very simple docplex : multiobjective

    Posted Thu October 10, 2019 03:08 AM

    Hi,

    let's go on with the example from https://www.linkedin.com/pulse/what-optimization-how-can-help-you-do-more-less-zoo-buses-fleischer/

     

    and let's see how easy moving to multiobjective is with docplex.

     

    from docplex.mp.model import Model

    mdl = Model(name='buses')

    nbbus50 = mdl.integer_var(name='nbBus50')
    nbbus40 = mdl.integer_var(name='nbBus40')
    nbbus30 = mdl.integer_var(name='nbBus30')

    cost = mdl.continuous_var(name='cost')
    co2emission = mdl.continuous_var(name='co2emission')

    mdl.add_constraint(nbbus50*50+nbbus40*40 + nbbus30*30 >= 200, 'kids')
    mdl.add_constraint(co2emission==nbbus50+nbbus40*1.1+nbbus30*1.2)
    mdl.add_constraint(cost==nbbus40*500 + nbbus30*400+nbbus50*625)
                
    mdl.minimize_static_lex([cost,co2emission])

    mdl.solve()

    for v in mdl.iter_integer_vars():
       print(v," = ",v.solution_value)

    print("The minimum cost is ",cost.solution_value);
    print("CO2 emission is ",co2emission.solution_value);

    gives

     

    nbBus50  =  4.0
    nbBus40  =  0
    nbBus30  =  0
    The minimum cost is  2500.0
    CO2 emission is  4.0

    If we had used 5 buses 40 seats, the cost would have been 2500 also but the CO2 emission would have been bigger.

    regards

    NB: Til CPLEX 12.8 that was possible only with CP models, and since 12.9 this works also for mathematical models.

    regards

    PS: Many other very simple docplex examples at https://www.linkedin.com/pulse/making-optimization-simple-python-alex-fleischer/

     

     

     


    #CPLEXOptimizers
    #DecisionOptimization


  • 2.  Re: Very simple docplex : multiobjective

    Posted Tue January 14, 2020 12:01 PM

    And now with set_multi_objective

    from docplex.mp.model import Model

    mdl = Model(name='buses')

    nbbus50 = mdl.integer_var(name='nbBus50')
    nbbus40 = mdl.integer_var(name='nbBus40')
    nbbus30 = mdl.integer_var(name='nbBus30')

    cost = mdl.continuous_var(name='cost')
    co2emission = mdl.continuous_var(name='co2emission')

    mdl.add_constraint(nbbus50*50+nbbus40*40 + nbbus30*30 >= 200, 'kids')
    mdl.add_constraint(co2emission==nbbus50+nbbus40*1.1+nbbus30*1.2)
    mdl.add_constraint(cost==nbbus40*500 + nbbus30*400+nbbus50*625)
                    
    sense="min"
    exprs=[cost,co2emission]
    priorities=[1,2]
    weights=[1,1]
    mdl.set_multi_objective(sense, exprs, priorities, weights, abstols=None, reltols=None, names=None)

    mdl.solve(lex_mipgaps = [0.001, 0.05], log_output=True)

    for v in mdl.iter_integer_vars():
        print(v," = ",v.solution_value)

    print("The minimum cost is ",cost.solution_value);
    print("CO2 emission is ",co2emission.solution_value);

    which gives

     

    nbBus50  =  4.0
    nbBus40  =  0
    nbBus30  =  0
    The minimum cost is  2500.0
    CO2 emission is  4.0

    We were able to set gaps per iterations through lex_mipgaps

     

    PS: Many other very simple docplex examples at https://www.linkedin.com/pulse/making-optimization-simple-python-alex-fleischer/


    #CPLEXOptimizers
    #DecisionOptimization