python - gurobi有具体的绝对值法吗?
问题描述
我想在我的目标函数中计算两个矩阵之和的绝对值,但由于某种原因,我不断收到错误消息“一元的错误操作数类型 -:'GenExpr'”。
#Data
hyperparameter = 0.5
weightss = np.array([0.25, 0.25, 0.25, 0.25])
weightss
transactional_costs = np.array([0.01, 0.01, 0.01, 0.01])
transactional_costs
# Add matrix variable for the stocks
x = m.addMVar(len(stocks))
# Objective is to maximize the return rate and minimize the risk
portfolio_objective = delta @ x - hyperparameter * (x @ sigma @ x) - gp.abs_(transactional_costs @ realweights - transactional_costs @ weightss)
m.setObjective(portfolio_objective, GRB.MAXIMIZE)
我已经尝试计算线外的绝对值的部分portfolio_objective,但我仍然遇到同样的问题。有人可以给我一个方向吗?
更新:数据来自雅虎财经
closes = np.transpose(np.array(data.Close)) # matrix of daily closing prices
absdiff = np.diff(closes) # change in closing price each day
reldiff = np.divide(absdiff, closes[:,:-1]) # relative change in daily closing price
delta = np.mean(reldiff, axis=1) # mean price change
sigma = np.cov(reldiff) # covariance (standard deviations)
std = np.std(reldiff, axis=1) # standard deviation
解决方案
我在 Gurobi 工作,我刚刚检查了源代码并验证绝对值函数不适用于 Gurobi Python (gurobipy) 矩阵接口。所以你有两个选择:
使用代数语法,它支持绝对值通用表达式。
自己建模绝对值函数;由于您的绝对值函数是凸的,您可以使用标准数学变换来替换
abs(z)
,zp+zn
其中z=zp-zn
和zp,zn
是非负决策变量,分别代表绝对值函数的正和负部分。
推荐阅读
- android - 无法更改 NDK 双簧管 LiveEffect 示例代码中的音频源
- python - kaggle notebook 上 sqlalchemy 库的函数 create_engine().execute() 出错
- java - 在 Java 中将字符串分解为句子:BreakIterator 在第二次出现“Dr.”时失败。
- python - 如何告诉 CP-SAT 设置具有某些偏好的决策变量?
- flutter - 在 Flutter 的 TextPainter 中,文本颜色在调试和发布时有所不同
- typescript - 如何在带有打字稿的Vue中使用变量值作为占位符
- php - Codeigniter SQL Server [您在 config/database.php 文件中指定了无效的数据库连接组(默认)。]
- java - 根据给定的频率将日期拆分为相等的间隔
- rubygems - 在 cataline macos 上安装 therubyracer gem 时出错
- python - pandas dataframe - 如何找到满足某些条件的连续行?