Cplex 中的 3 维参数

问题描述 投票:0回答:1

我有一个模型,需要计算房间的容量 (i) 除以学生组中的学生人数 (m)。我在我的对象函数中使用这个值。但我不确定如何编写这个参数。我使用“执行”吗? 另外,参数H_jkl用于表示教练l在时间段(j k)期间的心情(H=1“高兴”,=2“好”,=3“儿子”)。有五天,每天有四个时段。这意味着一周有二十个时间段。所以,我认为 H_jkl 是 [timeperiod] 和 [1..d] (一组讲师)的范围。但这不能显示索引(j k)。我想我需要使用这个“int timeperiod [1..b, 1..c] = [j: [k: (k + (j-1)*4)] | j in 1..b, k in 1..c]”连接时间段和(j k),但我认为这是错误的。 目标函数为:最小化 c_im * H_jkl * x_ijklmn

//Parameter
int a = ...; // Set of rooms // Index i                
int b = ...; // Set of days  // Index j              
int c = ...; // set of timeslots  // Index k
int d = ...; // set of instructors // Index l         
int e = ...; // set of student groups // Index m  
int f = ...; // set of courses // Index n

int capacity [1..a] = ...; // Capacity of rooms
int number [1..e] = ...; // number of students in student group
/* c [i][m] = capacity [i] / number [m]

range timeperiod = 1..20;
int H [timeperiod][1..d] = ...; // Instructors Preference

/*
int timeperiod [1..b, 1..c] = [j: [k: (k + (j-1)*4)] | j in 1..b, k in 1..c];
*/


dvar boolean x [1..a][1..b][1..c][1..d][1..e][1..f];


你能帮我解决这个问题吗?感谢您的提前!

cplex opl
1个回答
0
投票

对于c[i][m]的计算,不需要使用“execute”。可以直接写: float cc[i in 1..a][m in 1..e] = 容量[i]/数量[m]; 注意:您不能使用 c,因为您已经将 c 作为整数使用 (int c = ... ;)

关于时间段,我认为最简单的方法是使用您的定义:range timeperiod = 1..b*c; int H[时间段][1..d] = ...;

您需要更新决策变量 x 的声明: dvar 布尔值 x [1..a][1..b*c][1..d][1..e][1..f];

最后,你的目标可以写成如下: 最小化总和(1..a 中的 i,1..e 中的 m,1..b*c 中的 tp,1..d 中的 l,1..f 中的 n) cc[i][m]*H[ tp][l]*x[i][tp][l][m][n];

问候,

© www.soinside.com 2019 - 2024. All rights reserved.