import pandas as pd
import numpy as np
import re
import cvxpy as cvx
data = pd.read_excel('Optimality_V3.xlsx', encoding='latin-1')
如您所见,我刚刚导入了一个csv文件作为数据框。现在,我想使用CVXPY库求解最大混合函数,以识别行数据['D']的最佳值,从而使数据['B']的值之和最大。
我的目标函数是我的决策变量数据['D']的二次函数,其函数如下:
data ['B'] =数据['C'] *数据['D'] ** 2 / /数据['E']。
我想分配给数据的每一行的约束['D']:
data ['D'] * 0.8 <=数据['D'] <=数据['D'] * 1.2
decision_variables = []
variable_constraints = []
for rownum, row in data.iterrows():
var_ind = str('x' + str(rownum))
var_ind = cvx.Variable()
con_ind = var_ind * 0.8 <= var_ind <= var_ind * 1.2
decision_variables.append(str(var_ind))
variable_constraints.append(str(con_ind))
上面的代码是我这样做的尝试。我是CVXPY的新手,并试图弄清楚如何使用约束con_ind创建名为var_ind的变量。
答案 0 :(得分:1)
有关许多示例,请参见文档:https://www.cvxpy.org/index.html
data = pd.DataFrame(data={
'A': [1, 2, 3, 4, 5],
'B': [0, 50, 40, 80, 20],
'C': [1200, 600, 900, 6500, 200],
'D': [0.4, 1.2, 0.8, 1.6, 1.1],
'E': [0.4, 0.5, 0.6, 0.4, 0.5],
'F': [0.8, 0.4, 1.2, 1.6, 1],
})
x = cvx.Variable(data.index.size)
constraints = [
x * 0.8 <= x,
x <= x * 1.2
]
objective = cvx.Minimize(
cvx.sum(
cvx.multiply((data['C']/data['E']).tolist(), x**2)
)
)
prob = cvx.Problem(objective, constraints)
prob.solve()
print x.value
答案 1 :(得分:0)
我的优化器的目标是为D列计算新值,以使新值始终为(D * 0.8 <= new_D(或x以下)<= D * 1.2,我们称这些x为界限。这些,
最大化功能是:
cvx.sum [cvx.multiply((data ['C'] * data ['F'] / data ['D'])。tolist(),x)]
我还有一个约束:
cvx.sum [cvx.multiply((data ['F'] * data ['E'] * data ['C'] / data ['D'])。tolist(),x ** 2) ] == data ['C']。sum()
import pandas as pd
import numpy as np
import re
import cvxpy as cvx
data = pd.DataFrame(data={
'A': [1, 2, 3, 4, 5],
'B': [100, 50, 40, 80, 20],
'C': [1200, 600, 900, 6500, 200],
'D': [0.4, 1.2, 0.8, 1.6, 1.1],
'E': [0.4, 0.5, 0.6, 0.4, 0.5],
'F': [0.8, 0.4, 1.2, 1.6, 1],
})
x = cvx.Variable(data.index.size)
现在,我要添加第三个附加的二次约束,该约束表示C列的总和始终为常数。
constraints = [
x * 0.8 <= x,
x <= x * 1.2,
cvx.sum(
cvx.multiply((data['F']*data['E']*data['C']/data['D']).tolist(), x**2)
) == data['C'].sum()
]
如您所见,最小化函数非常简单并且是线性的。我如何将其转换为最大化函数?
objective = cvx.Minimmize(
cvx.sum(
cvx.multiply((data['C']*data['F']/data['D']).tolist(), x)
)
)
prob = cvx.Problem(objective, constraints)
prob.solve()
print(x.value)
我正在阅读CVXPY文档,它对我有很大帮助!但是我看不到任何具有第三个约束的示例,这些约束设计与我的类似,并且出现错误“ DCPError:问题未遵循DCP规则。”