用Cplex(Python)实现LP松弛

2024-04-25 22:15:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python上的docplex开发一个lp模型,我需要得到放松模型的解决方案变量,但不知道如何让python给我模型的放松解决方案变量。我可以将它们视为一个输出,但当我打印它时,它只会转换变量的未松弛值。所以,问题是我该如何解决

y[i].solution_value    # how can i addressed y[i] as a relaxed solution value of y[i]

致以最良好的祝愿


Tags: of模型valueas解决方案canhowsolution
1条回答
网友
1楼 · 发布于 2024-04-25 22:15:38

您可以依赖LinearRelaxer,如https://github.com/AlexFleischerParis/zoodocplex/blob/master/zoorelaxintegrity.py所示

from docplex.mp.model import Model
from docplex.mp.relax_linear import LinearRelaxer

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 = LinearRelaxer.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) 

solution for: buses
objective: 3800
nbBus40 = 6
nbBus30 = 2
Model: lp_buses
 - number of variables: 2
   - binary=0, integer=0, continuous=2
 - number of constraints: 1
   - linear=1
 - parameters: defaults
 - objective: minimize
 - problem type is: LP
Version identifier: 12.10.0.0 | 2019-11-26 | 843d4de2ae
CPXPARAM_Read_DataCheck                          1
CPXPARAM_RandomSeed                              201903125
Tried aggregator 1 time.
LP Presolve eliminated 1 rows and 2 columns.
All rows and columns eliminated.
Presolve time = 0.00 sec. (0.00 ticks)
solution for: lp_buses
objective: 3750.000
nbBus40 = 7.500
dual of the 300 kids constraint =  12.5

相关问题 更多 >

    热门问题