Decision Optimization

 View Only

Very simple docplex : get several solutions through enumerate with cpoptimizer

  • 1.  Very simple docplex : get several solutions through enumerate with cpoptimizer

    Posted Wed April 08, 2020 04:01 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/

     

     

    At https://www.ibm.com/developerworks/community/forums/html/topic?id=1aef661d-596b-4dca-964c-8c3917ded017&ps=25

    we saw  how we can ask cplex not a solution but many with docplex. (MIP)

    Now let's see how we can do the same with CPOptimizer (Constraint Programming)

    from docplex.cp.model import CpoModel

    mdl = CpoModel(name='buses')

    nbbus40 = mdl.integer_var(0,6,name='nbBus40')
    nbbus30 = mdl.integer_var(0,6,name='nbBus30')
    cost= mdl.integer_var(0,1000000,name='cost')

    mdl.add(cost==nbbus40*500 + nbbus30*400)
    mdl.add(cost<=4000)
    mdl.add(nbbus40*40 + nbbus30*30 >= 300)

    siter = mdl.start_search(SearchType='DepthFirst', Workers=1, TimeLimit=100)
    # Parameters needed to avoid duplicate solutions

    from pandas import *
    dfsol=pandas.DataFrame()

    for msol in siter:
        print(msol[nbbus40]," buses 40 seats")
        print(msol[nbbus30]," buses 30 seats")
        print("cost = ",msol[cost])
        dfsol=concat([dfsol,DataFrame([msol[nbbus40],msol[nbbus30],msol[cost]])],axis=1)
        print("\n")
    dfsol.columns=["nbBus40","nbBus30","cost"]

    print(dfsol)   

     

    gives

       nbBus40  nbBus30  cost
    0        3        4     6
    1        6        5     2
    2     3900     4000  3800

     

    NB:

    And many other examples at https://www.linkedin.com/pulse/making-optimization-simple-python-alex-fleischer/

     


    #CPOptimizer
    #DecisionOptimization