pandas - 使用 CVXPY 进行优化时如何定义变量、约束 Pandas Dataframe?
问题描述
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'] 的值之和最大。
我的目标函数是二次的,因为我的决策变量 data['D'] 函数是这样的:
数据['B'] = 数据['C'] * 数据['D']**2 / 数据['E']。
我想分配给每一行数据的约束['D']:
数据['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 的变量。
解决方案
查看许多示例的文档: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
推荐阅读
- docker - 如何配置 Jenkins 容器运行 maven 容器以使用代理
- node.js - 更新帖子后如何更新用户提要?
- dart - 添加/覆盖项目到地图并返回地图
- excel - 打开 Powerpoint 演示文稿并更新 VBA 中的 Excel 链接
- regex - 表单的正则表达式模式匹配验证在 ant.design 中不起作用
- python - 将 2 列向量添加到 ndarray
- git - 在 Github 上上传文件 > 25 MB
- python - 如何以字典的形式向我的烧瓶主服务器发送 POST 请求
- java - 绘制形状时鼠标输入的JavaFX问题?
- linqpad - LINQPad 演示数据库位置 (DemoDB.sdf)