【发布时间】:2019-10-11 12:46:43
【问题描述】:
我有几个关于建模约束的问题。我想它应该很简单,但我无法弄清楚。首先,让我概述一下情况:我想优化一个多维背包问题。但是,我在两个约束条件下遇到了一些困难。
我首先阅读包含以下列的 Excel 工作表:
{string} Items = …;
tuple Item {
int weight;
int classification_1;
int classification_2;
…}
dvar int a[Items] in 0..1;
classification_1和classification_2是物体的两个独立的分类,你可以想象一下,例如classification_1包含一个代表颜色的整数,而classification_2有另一个属性(例如形状,其中一个数字代表某种形状)。 为了更清楚地说明问题,您可以想象一个对象如下:
Ball_object; 23; 1; 2; …
其中 Ball_object 是名称,23 是重量,1 是蓝色,2 是圆形,其他属性与我的问题没有直接关系。 现在假设我有以下约束: 1. 所有商品的重量应小于所选商品总重量的10%。
我尝试了以下方法:
Subjected to {
Forall ( i_1 in Items )
ctItemRatio:
(Item[i_1].weight * a[i_1]) / (sum (I in Items) (Item[i].weight * a[i])) <= 0.1;
}
但这似乎不起作用,因为我的 CPLEX 工作室无法提取表达式。但是我有点困惑我实际上在这个约束上做错了什么。有谁知道我该如何解决这个问题?
- 对于每个形状,给定形状的总重量不应超过总重量的 15%。
我实际上并没有真正的线索如何做到这一点,因为我不能只遍历分类_2 对吗?我如何对其进行建模,以便我可以通过分类_2 使用 forall? (我很想找到一个 OPL 解决方案,而不仅仅是手动命名所有形状。
感谢您的帮助!
【问题讨论】:
-
对于约束 1,如果将两边都乘以
sum (I in Items) (Item[i].weight * a[i])(即从 LHS 中删除并放在 RHS 上),它是否有效? -
对于约束 2,我假设您的意思是给定形状的 选定 项的总重量不应超过 选定 项目?难道你不能先建立一个classification_2的唯一值列表,然后遍历这些值,为每个值建立约束吗?
-
对于约束 2,给定形状的所选项目的总权重不应超过 15%。
-
什么的 15%?所有物品的总重量?那种形状的所有物品?所有选定的项目?
-
所有选中物品重量的15%。