簡體   English   中英

通過紙漿最大化決策變量的標准差

[英]Maximising standard deviation of decision variables via PuLP

我是使用 PuLP 的新手,我正在嘗試將標准偏差編程為優化問題中的目標函數。 我已經閱讀了這個答案,雖然我知道它是相關的,但我無法將其應用於我的具體情況。

我正在嘗試解決以下優化問題:最大化一組 3 個決策變量的標准差,相關權重向量為 [0.25、0.40 和 0.35]。 我的限制是每個決策變量應該在 0.5 到 2.0 之間。 (這是一個簡化的示例;在實踐中,我將擁有更大的決策變量集和更大的相應權重向量)。

到目前為止,我的代碼如下:

from pulp import LpMaximize, LpProblem, LpVariable

# Create the model
model = LpProblem(name="max_stdev", sense=LpMaximize)

# Define the decision variables
x = {i: LpVariable(name=f"x{i}", lowBound=0.5, upBound=2.0) for i in range(3)}

# Add the constraints to the model
model += (0.25*x[0] + 0.40*x[1] + 0.35*x[2] == 1, "weight_constraint")

# Add the objective function to the model, which should be the standard deviation of the x vector
model += ??

# Solve the problem
status = model.solve()

我只是不確定如何以目標函數的形式應用標准偏差公式(見上文)。 同樣,我知道這個答案可能很有用,但我只是不確定如何使它工作。

非常感謝您的幫助!

使用 Pulp 做到這一點可能並不容易。 它只接受線性模型,這本質上是非線性和非凸的。 使用非凸二次求解器,我們可以最大化

sum(i, (x[i]-μ)^2)

這給出了:

----     30 VARIABLE x.L  

i1 0.500,    i2 0.500,    i3 1.929


----     35 VARIABLE z.L                   =        1.361  obj
            VARIABLE mu.L                  =        0.976  mean
            PARAMETER stdev                =        0.825  standard deviation

可能的求解器包括 Cplex、Gurobi、Baron、Antigone。

可以用一些絕對值項代替平方偏差目標。 但這會很混亂,因為問題是非凸的。 這將需要一些額外的二進制變量。 類似於以下內容:

   max sum(i, splus[i] + smin[i])
       μ = sum(i, x[i])/n
       splus[i] - smin[i] = x(i)-μ
       splus[i] ≤ b[i]*M
       smin[i]  ≤ (1-b[i])*M 
       0.25*x[0] + 0.40*x[1] + 0.35*x[2] = 1
       smin[i],splus[i] ≥ 0
       b[i] ∈ {0,1}
       x[i] ∈ [0.5,2]
       M = 2-0.5

對於這個例子,我得到了相同的結果:

----     85 VARIABLE x.L  

i1 0.500,    i2 0.500,    i3 1.929


----     85 VARIABLE z.L                   =        1.905  obj
            VARIABLE mu.L                  =        0.976  mean
            PARAMETER stdev                =        0.825  standard deviation
     

(通常解決方案不會完全相同)。

暫無
暫無

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

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