首先,提出第一個問題,
1.當目標函式與約束條件不相關時候,即:目標函式中沒有約束條件的變數時:變數如何取值?
進行簡單實驗:(實驗1)

結果為:

此時的變數取到0;
我們對兩個不等式的順序進行互換:(實驗2)

結果為:

因此得到第一個猜想1:不相關時,最終的取值與x的順序有一定的關系
但是第一個結果的0為什么會出現呢?我的思路是判斷x的默認范圍:

我們想到對變數執行@free(x);(實驗3)

結果為:

再換順序:(實驗4)

結果符合約束交集:

驗證結果(實驗4-1):


這里我們開始猜想2,約束與目標函式不相關,則約束不知道自己應該取最大值還是最小值(為方便理解,以下用區間表示)
使用@free后,取值都是x的右區間,假如右區間不存在呢?
實驗5:


則:右邊界不存在,則取左邊界
猜想3:左邊界不存在,則取右邊界
針對實驗1的0,其實就是默認x的左邊界,使用@free后,左邊界不存在,則最后變成取右邊界的數值;
實驗1的特點是第一個式子比第二個式子的區間小,出現結果取左區間的現象
我們對另一種情況進行實驗:
實驗6-1:


實驗6-2:(交換順序,結果依然正確)


對于實驗6-1,第一個區間比第二個區間小,取左邊界,對于實驗6-2,第一個區間比第二個區間大,取右邊界,右邊界沒有,取左邊界
結論1:在目標函式與不等式約束不相關時,變數的取值不確定應該取最大還是最小, 結論2:當順序執行時,第一個x的約束區間小于第二個x的約束區間時候,取左邊界 對結果為0的現象使用@free()后,使得x的左邊界的0消失,默認使用交集的右邊界 結論3:如果右邊界為無窮,則使用左邊界,(實驗1,5) 為什么探究這個問題?一般誰會這么寫不相關的約束與目標呢? 當我們寫目標函式的時候,可能出現一種情況:相關變數的系數為0,這種情況有時候不易被發現 當系數為0時候,就出現了我們上邊的問題,此時我們仍然想知道,變數取何值時目標函式最大,因為系數為0可能只是一種情況 而我們需要得到一般情況下取最值時候變數的解 這時候得出的結果就會產生錯誤,也是>、<與@bnd的結果不一致的誘因,我們來看看實體:
此處,我們使用>、<進行約束,結果為:

我們修改使用@bnd進行計算:


結果為8.04
我們直接給出結論,使用第一個>、<進行約束時候,s>0的約束條件下s的區間是最大的
上面的s>5.6667,s<8.04均比s>0的區間小,因此結果取到交集的左邊界,也就是5.66667,我們交換順序,結果也是5.6667
而當我們使用函式@bnd的時候,@bnd沒有給出s一個確定的區間,因此程式中只有兩個不等式,s>=5.66667,與s<=8.04
此時我們交換兩個式子的順序,讓小區間s<=8.04排到前面,發現結果發生變化:


說明我們的結論是可行的
解決方案:將系數CB改為一個不為0的數字,則變數重新明確自己的取值,結果便不會出錯了


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/501363.html
標籤:其他
