首页 > 解决方案 > 使用变量限制总和时的 glpk 问题

问题描述

尝试定义以下约束时遇到一些问题:

s.t. accumulative_times{i in JOBS}: actimes[i] = sum{j in  PLACES,k in JOBS : j <= placing[i] } t[k,j]*time[k];

具有以下定义:

param n >=0;

set JOBS  := 1..n;
set PLACES := 1..n;


param d{PLACES};
param time{JOBS};
var t{i in PLACES,j in JOBS} binary;
var delay{i in JOBS} integer;
var placing{i in JOBS} integer;
var actimes{i in JOBS} integer;

s.t. constraint1{i in PLACES} :sum{j in JOBS} t[i,j] =1;


s.t. constraint2{j in JOBS} :sum{i in PLACES} t[i,j] =1;

s.t. place_cons{i in JOBS}: placing[i] = sum{j in PLACES} j*t[j,i];


s.t. accumulative_times{i in JOBS}: actimes[i] = sum{j in  PLACES,k in JOBS : j <= placing[i] } t[k,j]*time[k];

我正在尝试计算任务等待结束的总时间。有人知道我在做什么错或以其他方式定义此约束吗?

标签: glpk

解决方案


GLPK 只能解决线性问题。因此,LP 的系数不能依赖于变量。

代替放置整数变量,您可以使用二进制变量数组来指示作业 i 在周期 j 中等待。

或者您使用二进制文件指示作业 i 在周期 j 中处理,并使用更多非整数变量,具体取决于这些二进制文件。


推荐阅读