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