0
我正在線性化我在紙漿中的乘法約束。約束條件下的乘法 - 求解紙漿(python)
它看起來是這樣的:
prob += (1 - Y) * (3 - X)
等於:
prob += 3 - 3*Y - X + X*Y
其中Y是一個二元變量,在公式一切除了以下部分線性:Y*X
。我試圖用我的另一個問題發現公式來解決這個問題:
所以我試着用X1*X2 = Y
,使用我的代碼,這給X*Y = A
。我使用日誌替換方法。這給了我下面的代碼:
prob += math.log(float(A)) = math.log(float(X)) + math.log(float(y))
和其他約束:
prob += 3 - 3*Y - X + A
只有這似乎並沒有工作,因爲一個浮動只能是一個字符串或數字,而不是LpVariable。有沒有辦法使用公式圖像中給出的第一種取代方法來解決這個問題?
謝謝,但是當我這樣做時,它說:'float()參數必須是字符串或數字,而不是'NoneType',如果我刪除了float '需要浮動'。我不認爲記錄LpVariable是可能的。 – WhatTheShrimp
挖掘到模塊的源代碼,獲取值是一個不同的呼叫抱歉。從他們的代碼在這裏 - https://github.com/coin-or/pulp/blob/master/src/pulp/pulp.py - 在LpVariable類中: def value(self): return self.varValue 所以得到一個變量的值是x.value()而不是值(x),它應該給你你的值,假設該變量有一個賦值給它的值。您將需要保留float()部分,但內部沒有將值分配給LpVariable類中的浮點類型。 – huma474