簡體   English   中英

Excel Solver:有沒有辦法遍歷2個變化的變量?

[英]Excel Solver: Is there a way to iterate over 2 changing variables?

我的求解器有一個問題,如下所示(簡化版本):所以我有一個嵌套的If語句,該語句描述2個變化變量(x,y)的條件。 例如:在一個單元格中:IF(AND((x <= 2),(x> = 0.5),(y <= 10),(y> = 5)),1,0
它下面的單元格:IF(AND((x <= 2.5),(x> = 1.9),(y <= 11),(y> = 9)),1,0
目標函數是這兩個變量的總和
求解器或目標搜索器(除非我給它提供遮篷)似乎無法獲得除0,0以外的遮篷。 我的實際問題是我有6個這樣的IF單元,我試圖找到一個最大化目標函數的(x,y)。 我希望excel能夠進行盡可能多的組合。

有什么想法或其他方式嗎? 謝謝。

求解器未在此玩具問題中找到最佳解的原因是因為使用IFAND語句使問題不凸。 對於非凸問題, GRG Nonlinear求解方法(求解器使用的默認值)不能保證最優解,因為它可能會陷入非最優局部最優解中。

話雖如此,但是有一種方法可以將問題表達為混合整數程序,盡管它仍然是非凸的,但可以使用Solver的“ Simplex LP”方法進行求解,並給出最大的保證值​​。

模型設定

這是電子表格設置的屏幕截圖:

在此處輸入圖片說明

為了方便起見,我對多個數量使用了命名范圍。 尤其是:

 - B2 --> x_var
 - C2 --> x_UB1
 - D2 --> x_LB1
 - E2 --> x_UB2
 - F2 --> x_LB2

和第3行我使用相同的約定,但不是x_我們y_

紅色單元格( B4E4 )具有您描述的條件,藍色單元格( B5 )具有它們的總和。

例如, B4的條件為

 =IF(AND(x_var<=x_UB1,x_var>=x_LB1,y_var<=y_UB1,y_var>=y_LB1),1,0)

我們將用兩個二進制變量替換這些表達式,如果滿足每個表達式,則它們等於1,否則等於0。

邏輯是,我們可以施加約束來代替IF表達式:

LB_x * z <= x <= UB_x * z
LB_y * z <= y <= UB_y * z
z is binary

然后z = 1 ==> LB_x <= x <= UB_x LB_y <= y <= UB_y

並且由於我們最大化了兩個z變量的總和,因此xy將嘗試使i對應於相應的范圍,從而使盡可能多的z等於1。

在此處輸入圖片說明

綠色單元格H2, J2具有兩個新的二進制cond1_true, cond2_true分別稱為cond1_true, cond2_true 其他單元格具有上述約束:

例如,對於第一個表達式:

J2: =x_var-cond1_true*x_UB1
J3: =y_var-cond1_true*y_UB1
K2: =x_LB1*cond1_true-x_var
K3: =y_LB1*cond1_true-y_var

在求解器模型中,所有這些像元都必須<= 0等於<= 0

求解器模型:

在此處輸入圖片說明

在該模式下,目標函數單元是二進制變量的總和。 決策變量是x_var, y_yar, cond1_true, cond2_true 約束全部為expression <= 0格式。 這是工作表: https : //www.dropbox.com/s/uek2k9gownhh3ni/excel-solver-is-there-a-way-to-iterate-over-2-changing-variables.xlsx?dl=0

使用此公式,求解器可以遍歷變量的多種組合,並嘗試選擇最佳變量。 它通常可以保證最佳解決方案(小問題幾乎總是這樣)

更新

如果間隔不重疊,則需要將LB_x * z <= x <= UB_x * z取為min(LB_x)*(1-z)+ LB_x * z <= x <= UB_x * z + max(UB_x)* (1-z)

其中min(LB_x)是所有間隔的最小下限(對於UB和y同樣)。 這樣,如果x不落入間隔(z = 0),則僅被迫落入某個其他間隔。

我希望這有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM