簡體   English   中英

如何為我的優化添加約束?

[英]How to add a constraint to my optimization?

我正在制定一個具有二維矩陣A的優化問題。

           A= [0 f1 0 f2]
              [f3 f3 0 0]
              .........

我還有另一個二維矩陣B應該填寫。 B具有與A相同的大小。如果a_ij = 0(A的元素),則我需要b_ij(B的元素)為零;如果a_ij不為零,則我需要b_ij大於零且小於或等於a_ij。

我如何在我的公式中表示這一點? 我添加了此約束/條件:

            b_ij<=a_ij

但這不滿足以下條件:當a_ij不等於零時,b_ij不等於零。 有什么幫助嗎?

如果所有元素都是正數,則通過逐元素比較來保持每個矩陣的最小元素:

B2 = min(A,B)

或者,創建一個邏輯矩陣,指示是否滿足條件,然后將每個元素與矩陣B相乘,僅保留滿足條件的元素,將其他元素設置為零:

B = B.*(A~=0)

然后,使B元素小於或等於A元素,否則將其替換為A的值。

B = B.*(B<=A) + A.*(B>A) )

此選項使您可以概括約束。

如果a_ij的元素大於零,則指示需要b_ij的元素大於零。 一種選擇是使用函數max來確保B所有元素均為正。

B = max(1e-2,B); % exact value is yours to set.

此步驟由您決定,並取決於您的問題。

您要實現含義

a = 0 => b = 0
a <> 0 =>  0 < b <= a

如果a是(恆定)數據,那么這是微不足道的。 如果a是變量,那么事情就不那么容易了。

您實現了部分含義為

b <= a

這意味着a為非負數: a>=0 這也意味着b為非負數。 剩下的含義a>0 => b>0現在可以實現為

a <= δ * 1000
b >= δ / 1000
δ in {0,1}

許多MIP求解器支持指標約束。 那可以讓你說:

δ = 0 -> a = 0
δ = 1 -> b >= 0.001 
δ in {0,1}

暫無
暫無

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

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