cvx实数变量_如何定义变量,当使用CVXPY进行优化时,对熊猫数据框的约束?

我的优化器的目标是计算列D的新值,使得新值总是(D * 0.8和lt=NexYd(或x以下)& lt;=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:problem does not follow dcp rules”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值