如何在 MathProg 中的所有行的总和中获取所有列的最大值
How to take the maximum over all columns of the sum over all rows in MathProg
我正在尝试解决一个优化问题,其中我要优化的变量位于矩阵中(销售员 X 商店,如果该销售员被分配到该商店,则变量为 1)。每个店铺都有利润。
我是这样定义的:
set SalesPeople;
set Shops;
param profit{Shops} >=0;
var a{i in SalesPeople, j in Shops}, binary;
我现在正在尝试添加一个约束条件,表示所有商店的利润总和的所有销售人员的最大值大于某个数字。我就是这样制定的,但这似乎不起作用。
subject to cond3: max{i in SalesPeople} sum{j in Shops} profit[j]*a[i,j] >= 10;
这能做到吗?如果是这样,正确的语法是什么?
我才刚刚开始学习 MathProg,所以有点混乱。
约束条件
max{i in SalesPeople} sum{j in Shops} profit[j]*a[i,j] >= 10;
不是线性的,所以 MIP 求解器不能接受它。不幸的是,这种特殊形式需要额外的二进制变量。如果约束是
max{i in SalesPeople} sum{j in Shops} profit[j]*a[i,j] <= 10;
我们可以这样写:
cond3{i in SalesPeople}: sum{j in Shops} profit[j]*a[i,j] <= 10;
对于您的情况,我们需要执行以下操作:
var d{i in SalesPeople}, binary;
cond3{i in SalesPeople}: sum{j in Shops} profit[j]*a[i,j] >= 10*d[i];
sumd: sum{i in SalesPeople} d[i] >= 1;
最后一个约束也可以写成:
sumd: sum{i in SalesPeople} d[i] = 1;
这个构造本质上说:“至少一个 i
应该有: sum{j in Shops} profit[j]*a[i,j] >= 10
”。
我正在尝试解决一个优化问题,其中我要优化的变量位于矩阵中(销售员 X 商店,如果该销售员被分配到该商店,则变量为 1)。每个店铺都有利润。
我是这样定义的:
set SalesPeople;
set Shops;
param profit{Shops} >=0;
var a{i in SalesPeople, j in Shops}, binary;
我现在正在尝试添加一个约束条件,表示所有商店的利润总和的所有销售人员的最大值大于某个数字。我就是这样制定的,但这似乎不起作用。
subject to cond3: max{i in SalesPeople} sum{j in Shops} profit[j]*a[i,j] >= 10;
这能做到吗?如果是这样,正确的语法是什么?
我才刚刚开始学习 MathProg,所以有点混乱。
约束条件
max{i in SalesPeople} sum{j in Shops} profit[j]*a[i,j] >= 10;
不是线性的,所以 MIP 求解器不能接受它。不幸的是,这种特殊形式需要额外的二进制变量。如果约束是
max{i in SalesPeople} sum{j in Shops} profit[j]*a[i,j] <= 10;
我们可以这样写:
cond3{i in SalesPeople}: sum{j in Shops} profit[j]*a[i,j] <= 10;
对于您的情况,我们需要执行以下操作:
var d{i in SalesPeople}, binary;
cond3{i in SalesPeople}: sum{j in Shops} profit[j]*a[i,j] >= 10*d[i];
sumd: sum{i in SalesPeople} d[i] >= 1;
最后一个约束也可以写成:
sumd: sum{i in SalesPeople} d[i] = 1;
这个构造本质上说:“至少一个 i
应该有: sum{j in Shops} profit[j]*a[i,j] >= 10
”。