Page 303 - 数学建模算法与应用
P. 303
第十章 目标规划的研究
9, 5 10, 6 11, 7 12, 8 13/: wplus, wminus;
endsets
data:
ctr = 5; % 控制中心点
goal = 0 0 0 0 0 0 0 0; % 目标值
a = 300 200 400; % 工厂产能
b = 200 100 450 250; % 客户需求
c = 5 2 6 7 3 5 4 6 4 5 2 3; % 成本矩阵
wplus = 0 0 0 0 0 0 0 0 0 0 1 1 1 1; % 过剩惩罚
wminus = 1 1 1 1 1 1 1 1 1 1 0 0 1 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(plant(i): @sum(customer(j): x(i, j)) <= a(i));% 特殊情况约束
x(3, 1) + dminus(1) - dplus(1) = 100;% 客户需求约束(部分满足)
@for(customer(j): @sum(plant(i): x(i, j)) + dminus(1 + j) - dplus(1 + j) =
0.8 * b(j));% 客户需求完全满足约束
@for(customer(j): @sum(plant(i): x(i, j)) + dminus(5 + j) - dplus(5 + j) =
b(j));
% 总成本约束
@sum(routes: c * x) + dminus(10) - dplus(10) = 3245;% 特殊情况约束
x(2, 4) + dminus(11) - dplus(11) = 0;% 特殊情况约束
@sum(plant(i): x(i, 1)) - 20 / 45 * @sum(plant(i): x(i, 3)) + dminus(12) -
dplus(12) = 0;% 总成本约束
@sum(routes: c * x) + dminus(13) - dplus(13) = 2950;% 设置 z 的边界条件
@for(level(i) | i #lt# @size(level): @bnd(0, z(i), goal));% 添加额外的约
293

