Page 299 - 数学建模算法与应用
P. 299
第十章 目标规划的研究
model:
sets:
level/1..5/: p, z, goal;
variable/1..3/: x;
s_con_num/1..8/: g, dplus, dminus;
s_con(s_con_num, variable): c;
obj(level, s_con_num)/1 1, 2 2, 2 3, 2 4, 3 8, 4 5, 4 6, 4 7, 5 1/:
wplus, wminus;
endsets
data:
ctr = 3; % 控制中心点
goal = 0 0 0 0 0; % 目标值
g = 1700 50 50 80 100 120 100 1900; % 约束值
c = 5 8 12 1 0 0 0 1 0 0 0 1 1 0 0 0 1 0 0 0 1 5 8 12; % 成本矩阵
wplus = 0 0 0 0 1 0 0 0 1; % 过剩惩罚
wminus = 1 20 18 21 0 20 18 21 0; % 不足惩罚
enddata
*
min = @sum(level: p z); % 最小化目标函数 % 设置控制中心点的权重为 1,
其他为 0
p(ctr) = 1;
@for(level(i) | i #ne# ctr: p(i) = 0);% 计算目标函数中的 z
@for(level(i): z(i) = @sum(obj(i, j): wplus(i, j) * dplus(j) + wminus(i,
*
j) dminus(j)));% 约束条件
@for(s_con_num(i): @sum(variable(j): c(i, j) * x(j)) + dminus(i) - dplus(i) =
g(i));% 设置 z 的边界条件
@for(level(i) | i #lt# @size(level): @bnd(0, z(i), goal));% 添加额外的约
束以确保模型更加复杂 % 每个变量的取值范围
@for(variable(i): @bnd(0, x(i), 1000));% 确保所有变量的总和不超过某
个上限
@sum(variable(i): x(i)) <= 1500;% 确保每个变量的取值都大于某个下限
289

