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
   298   299   300   301   302   303   304   305   306   307   308