Decision Optimization

Decision Optimization

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

 View Only

Very simple docplex : relax integrity constraint and dual

  • 1.  Very simple docplex : relax integrity constraint and dual

    Posted Mon September 02, 2019 08:02 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/

     

    Now let's see how easy it is to relax integrity constraints and turn a MIP into LP, solve and get dual value (shadow price)

     

    def make_bus_model():
        mdl = Model(name='buses')
        nbbus40 = mdl.integer_var(name='nbBus40')
        nbbus30 = mdl.integer_var(name='nbBus30')

        mdl.add_constraint(nbbus40 * 40 + nbbus30 * 30 >= 300, 'kids')
        mdl.minimize(nbbus40 * 500 + nbbus30 * 400)
        return mdl

    if __name__ == '__main__':
        bm1 = make_bus_model()
        bm1.print_information()
        s1 = bm1.solve(log_output=True)
        s1.display()

        bmr = make_relaxed_model(bm1)
        bmr.print_information()
        rs = bmr.solve(log_output=True)
        rs.display()

        duals = bmr.get_constraint_by_name("kids").dual_value

        print("dual of the 300 kids constraint = ",duals)

     

    gives

    solution for: buses
    objective: 3800
    nbBus40 = 6
    nbBus30 = 2
    Model: buses
     - number of variables: 2
       - binary=0, integer=0, continuous=2
     - number of constraints: 1
       - linear=1
     - parameters: defaults
    CPXPARAM_Read_DataCheck                          1
    Tried aggregator 1 time.
    LP Presolve eliminated 1 rows and 2 columns.
    All rows and columns eliminated.
    Presolve time = 0.03 sec. (0.00 ticks)
    solution for: buses
    objective: 3750.000
    nbBus40 = 7.500
    dual of the 300 kids constraint =  12.5

    And we can confirm that if we use only 40 seats buses the marginal cost of a seat within a 40 seats bus is costbus40/40=12.5

    regards

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

     

     

     

     


    #CPLEXOptimizers
    #DecisionOptimization