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
   294   295   296   297   298   299   300   301   302   303   304