首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >docplex.mp.utils.DOcplexException: Model.if_then()

docplex.mp.utils.DOcplexException: Model.if_then()
EN

Stack Overflow用户
提问于 2022-07-22 05:05:55
回答 1查看 59关注 0票数 1

这是Docplex代码

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

car=[1, 2, 3]
myorder=[391, 392, 393, 448, 449, 450]

mdl = Model(name='planning')
Assignment = mdl.binary_var_matrix(myorder, car, name='Assignment')


CarLoaded = mdl.integer_var_dict(car, name='CarLoaded')
for f in car:
    CarLoaded[f] = mdl.sum(Assignment[o, f] * 20 for o in myorder)

CarUtilized = mdl.binary_var_dict(car, name='CarUtilized')
for f in car:
    mdl.add_constraint(
        mdl.if_then(CarLoaded[f] / 123 >= 0.8, CarUtilized[f] == 1))

LoadSum = mdl.sum(CarUtilized[f] * CarLoaded[f] / 30 for f in car)
mdl.maximize(LoadSum)

它给出了例外

代码语言:javascript
复制
Traceback (most recent call last):
  File "D:\Dev\my_test.py", line 17, in <module>
    mdl.if_then(CarLoaded[f] / 123 >= 0.8, CarUtilized[f] == 1))
  File "C:\ProgramData\Anaconda3\lib\site-packages\docplex\mp\model.py", line 3971, in if_then
    StaticTypeChecker.typecheck_discrete_constraint(logger=self, ct=if_ct, msg='Model.if_then()')
  File "C:\ProgramData\Anaconda3\lib\site-packages\docplex\mp\sttck.py", line 66, in typecheck_discrete_constraint
    logger.fatal('{0}, {1!s} is not discrete', msg, ct)
  File "C:\ProgramData\Anaconda3\lib\site-packages\docplex\mp\model.py", line 1078, in fatal
    self._error_handler.fatal(msg, args)
  File "C:\ProgramData\Anaconda3\lib\site-packages\docplex\mp\error_handler.py", line 210, in fatal
    raise DOcplexException(resolved_message)
docplex.mp.utils.DOcplexException: Model.if_then(), 0.163Assignment_391_1+0.163Assignment_392_1+0.163Assignment_393_1+0.163Assignment_448_1+0.163Assignment_449_1+0.163Assignment_450_1 >= 0.8 is not discrete

请问问题出在甚麽地方,应如何纠正呢?

EN

回答 1

Stack Overflow用户

发布于 2022-07-22 07:36:44

变化

代码语言:javascript
复制
for f in car:
    mdl.add_constraint(
        mdl.if_then(CarLoaded[f] / 123 >= 0.8, CarUtilized[f] == 1))

转到

代码语言:javascript
复制
for f in car:
    mdl.add_constraint(
        mdl.if_then(CarLoaded[f]  >= math.ceil(0.8*123), CarUtilized[f] == 1))

你的模型会运作得很好

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73075340

复制
相关文章

相似问题

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