繁体   English   中英

整数线性编程程序的行为不符合预期

[英]Integer linear programming program does not behave as expected

我有以下整数线性规划问题,该问题按预期分配值,但是当我添加某些约束时,目标函数似乎变得虚空。 我不确定该怎么做。 我正在使用python解决问题。

非空配方

score12 = 1
score21 = -1
C       = 1000000

maximize  : (w12 - s12) * score12 + (w21 - s21) * score21

subject to:
            d12 = x2 - x1
            d21 = x1 - x2

            d12 - w12*C <= 0
            d21 - w21*C <= 0

            d12 + (1 - w12)*C > 0
            d21 + (1 - w21)*C > 0

            d12 + s12*C      >= 0
            d21 + s21*C      >= 0

            0 <= xi <= 1      , continuous
            0 <= wij, sij <= 1, integer

目标功能符合预期:

MAXIMIZE
-1*s_12 + 1*s_21 + 1*w_12 + -1*w_21 + 0

并且解决方案符合预期:

('d_12', '= ', 0.0)
('d_21', '= ', 0.0)
('s_12', '= ', 0.0)
('s_21', '= ', 1.0)
('w_12', '= ', 1.0)
('w_21', '= ', 0.0)
('x_1', '= ', 0.0)
('x_2', '= ', 0.0)

但是,当我添加以下约束或仅一个约束时:

d12 - (1 - s12)*C < 0 
d21 - (1 - s21)*C < 0 

Python将目标函数更改为:

MAXIMIZE
0*__dummy + False
SUBJECT TO
... omited

我不是用它做的,解决方案变得空虚:

('__dummy', '= ', None)
('d_12', '= ', 0.0)
('d_21', '= ', 0.0)
('s_12', '= ', 1.0)
('s_21', '= ', 1.0)
('w_12', '= ', 1.0)
('w_21', '= ', 1.0)
('x_1', '= ', 0.0)
('x_2', '= ', 0.0)

我没有分析您的约束,但是这里有一些关于可能存在的问题的评论。

您正在使用它来定义约束:

d12 - (1 - s12)*C < 0

在此处输入图片说明

Pulp对于错误使用库的能力不强,通常在添加一些格式错误的约束时会悄无声息地覆盖目标 (此处可能就是这种情况)。 也许您会在纸浆的问题跟踪器中找到类似的体验

考虑使用约束类而不使用重载运算符。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM