首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docplex返回优先可行解决方案

Docplex返回优先可行解决方案
EN

Stack Overflow用户
提问于 2022-06-11 16:23:53
回答 1查看 101关注 0票数 1

我试图解决一个NP难题使用docplex和cplex,我需要docplex返回第一个事实解决方案建立和停止搜索。通常,当找到第n个最好的解决方案时,停止。就像这样:

集合极限解n

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-11 16:44:47

您可以在docplex python中使用parameters.mip.limits.solutions

这段代码的一个小改动给出

代码语言:javascript
复制
from docplex.mp.model import Model

mdl = Model(name='buses')

mdl.parameters.mip.limits.solutions=1


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)

mdl.solve()



print("int sol limit = ",mdl.parameters.mip.limits.solutions.get())


for v in mdl.iter_integer_vars():
    print(v," = ",v.solution_value)

这给

代码语言:javascript
复制
int sol limit =  1
nbBus40  =  8.0
nbBus30  =  0

使用所有其他apis,您也可以这样做。

例如,使用pyomo:

代码语言:javascript
复制
import pyomo.environ as pyo
from pyomo.opt import SolverFactory

opt = pyo.SolverFactory("cplex")

opt.options['mip limits solutions'] = 1

model = pyo.ConcreteModel()

model.nbBus = pyo.Var([40,30], domain=pyo.PositiveIntegers)

model.OBJ = pyo.Objective(expr = 500*model.nbBus[40] + 400*model.nbBus[30])

model.Constraint1 = pyo.Constraint(expr = 40*model.nbBus[40] + 30*model.nbBus[30] >= 300)




opt.solve(model)

print("nbBus40=",model.nbBus[40].value)
print("nbBus30=",model.nbBus[30].value)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72586034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档