天天看點

多目标規劃

  • 多目标規劃的模型基礎:
  1. 正負偏差變量

    即d2+,d2-分别表示決策值超過和未達到目标值的部分。且di+,di-均大于0

  2. 剛性限制和目标限制(柔性目标限制具有偏差)

    多目标規劃中,剛性限制中保持>=/<=不變。限制需要變換為柔性限制時,需要把>=/<=改成=(因為已經有了d2+,d2-用來表示正負偏差),并且追加上(+di-di+)這裡注意!是+di-,-di+,這是因為需要将目标還原回去,使其最接近原來的剛性限制

  3. 優先因子與權系數

    對于若幹個目标,分出主次和輕重緩急

  4. 目标規劃的目标函數

    是所有偏差變量的權重和。值得注意的是該權重和均取min值。且每個不同的等級需求中,并不一定di+、di-都出現。具體分析需要具體看題目

    舉例如下:

    題目中說裝置B既要求充分利用,又盡可能不加班,那麼用時間衡量列出的表達式即為:min z=P3(d3- + d3+)之是以這裡用+而不是-d3+的原因是:正負偏差不可能同時存在,必有di+di-=0(因為決策值不可能同時大于目标值又小于目标值),又前面是min,是以就取+,讓di+和di-都是正值。故引出如下規則:

多目标規劃
  • 最後給出例題,并給出對應的解法:

問題:某企業生産甲、乙兩種産品,需要用到 A, B,C 三種裝置,關于産品的赢利與使用裝置的工時及限制如下表所示。問該企業應如何安排生産,才能達到下列目标:

多目标規劃

( 1)力求使利潤名額不低于 1500 元;

( 2)考慮到市場需求,甲、乙兩種産品的産量比應盡量保持 1:2;

( 3)裝置 A 為貴重裝置,嚴格禁止逾時使用;

( 4)裝置C 可以适當加班,但要控制;裝置 B 既要求充分利用,又盡可能不加班。

在重要性上,裝置 B 是裝置C 的 3 倍。

建立相應的目标規劃模型并求解。

解:設該企業生産甲乙兩種産品的件數分别為 x1, x2 ,相應的目标規劃模型為:

多目标規劃
  • 下面采用序貫解法,用lingo求解:

一級目标:

model:
sets:
variable/1..2/:x;!規定變量;
s_con_num/1..4/:g,dplus,dminus;!軟限制條件個數(g的個數=dplus個數=dminus個數)以及需要的相關參數;
s_con(s_con_num,variable):c;!軟限制系數;
endsets
data:
g=1500 0 16 15;
c=200 300 2 -1 4 0 0 5;
enddata
min=dminus(1);!第一個目标函數;!對應min=z中第一小部分
2*x(1)+2*x(2)<12;!硬限制;
@for(s_con_num(i):@sum(variable(j):c(i,j)*x(j))+dminus(i)-dplus(i)=g(i)); !利用設定完畢的資料建構軟限制的表達式
!軟限制表達式;
@for(variable:@gin(x));!限制變量為整數;
end
           
!求得dminus(1)=0,接着求解第二個目标;
model:
sets:
variable/1..2/:x;!規定變量;
s_con_num/1..4/:g,dplus,dminus;!軟限制條件個數以及相關參數;
s_con(s_con_num,variable):c;!軟限制系數;
endsets
data:
g=1500 0 16 15;
c=200 300 2 -1 4 0 0 5;
enddata
min=dminus(2)+dplus(2);!第二個目标函數;
2*x(1)+2*x(2)<12;!硬限制;
@for(s_con_num(i):@sum(variable(j):c(i,j)*x(j))+dminus(i)-dplus(i)=g(i));
!軟限制表達式;
dminus(1)=0;!第一目标結果;
@for(variable:@gin(x));
end
           
!求得dminus(2)=0,接着求解第三個目标;
model:
sets:
variable/1..2/:x;!規定變量;
s_con_num/1..4/:g,dplus,dminus;!軟限制條件個數以及相關參數;
s_con(s_con_num,variable):c;!軟限制系數;
endsets
data:
g=1500 0 16 15;
c=200 300 2 -1 4 0 0 5;
enddata
min=3*dminus(3)+3*dplus(3)+dminus(4);!第三個目标函數;
2*x(1)+2*x(2)<12;!硬限制;
@for(s_con_num(i):@sum(variable(j):c(i,j)*x(j))+dminus(i)-dplus(i)=g(i));
!軟限制表達式;
dminus(1)=0;!第一目标結果;
dminus(2)+dplus(2)=0;!第二級目标結果;
@for(variable:@gin(x));
end
           

這篇文章,是又一個故事的結束...

lazy's story is continuing.