Decision Optimization

Decision Optimization

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

 View Only

Very simple docplex : data in a list of tuple

  • 1.  Very simple docplex : data in a list of tuple

    Posted Thu September 27, 2018 09:36 AM

    Hi,

     

    I wrote https://www.ibm.com/developerworks/community/forums/html/topic?id=a8580237-639a-411b-b1df-f390a24da06c&ps=25

    for CPLEX MIP

    Let s have a look at CPO now.

     

    In docplex CPO we can write

    from docplex.cp.model import CpoModel

    mdl = CpoModel(name='buses')
    nbbus40 = mdl.integer_var(0,1000,name='nbBus40')
    nbbus30 = mdl.integer_var(0,1000,name='nbBus30')
    mdl.add(nbbus40*40 + nbbus30*30 >= 300)
    mdl.minimize(nbbus40*500 + nbbus30*400)

    msol=mdl.solve()

    print(msol[nbbus40]," buses 40 seats")
    print(msol[nbbus30]," buses 30 seats")

    and then if we want to read data from a list of tuple

    We may rely on:

    • a dictionnary integer_var_dict

    from docplex.cp.model import CpoModel

    # Data

    Buses=[
        (40,500),
        (30,400)
        ]

    nbKids=300

    # Indexes

    busSize=0;
    busCost=1;

    for b in Buses:
        print("buses with ",b[busSize]," seats cost ",b[busCost])

    mdl = CpoModel(name='buses')

    #decision variables
    mdl.nbBus=mdl.integer_var_dict(Buses,0,1000,name="nbBus")

    # Constraint
    mdl.add(sum(mdl.nbBus[b]*b[busSize] for b in Buses) >= nbKids)

    # Objective
    mdl.minimize(sum(mdl.nbBus[b]*b[busCost] for b in Buses))

    msol=mdl.solve()

    # Dislay solution
    for b in Buses:
        print(msol[mdl.nbBus[b]]," buses with ",b[busSize]," seats");

    • variables integer_var
     

    from docplex.cp.model import CpoModel

    # Data

    Buses=[
        (40,500),
        (30,400)
        ]

    nbKids=300

    # Indexes

    busSize=0;
    busCost=1;

    for b in Buses:
        print("buses with ",b[busSize]," seats cost ",b[busCost])

    mdl = CpoModel(name='buses')

    #decision variables
    mdl.nbBus = {b: mdl.integer_var(0,1000,name="nbBus"+str(b[busSize])) for b in Buses}

    # Constraint
    mdl.add(sum(mdl.nbBus[b]*b[busSize] for b in Buses) >= nbKids)

    # Objective
    mdl.minimize(sum(mdl.nbBus[b]*b[busCost] for b in Buses))

    msol=mdl.solve()

    # Dislay solution
    for b in Buses:
        print(msol[mdl.nbBus[b]]," buses with ",b[busSize]," seats");

     

     

    • list integer_var_list
     

    from docplex.cp.model import CpoModel

    # Data

    Buses=[
        (40,500),
        (30,400)
        ]

    nbKids=300
    nbSizes=len(Buses)

    # Indexes

    busSize=0;
    busCost=1;

    for b in Buses:
        print("buses with ",b[busSize]," seats cost ",b[busCost])

    mdl = CpoModel(name='buses')

    #decision variables

    mdl.nbBus = mdl.integer_var_list(nbSizes,0,1000,name="nbBus")


    # Constraint
    mdl.add(sum(mdl.nbBus[b]*Buses[b][busSize] for b in range(0,nbSizes)) >= nbKids)

    # Objective
    mdl.minimize(sum(mdl.nbBus[b]*Buses[b][busCost] for b in range(0,nbSizes)))

    msol=mdl.solve()

    # Dislay solution
    for b  in range(0,nbSizes):
        print(msol[mdl.nbBus[b]]," buses with ",Buses[b][busSize]," seats");

       

     

    regards


    #CPOptimizer
    #DecisionOptimization