我想解决R中的优化问题;下面给出了相同的虚拟数据。
# Input Data
DTM <- sample(1:30,10,replace=T)
DIM <- rep(30,10)
Price <- 100 - seq(0.4,1,length.out=10)
# Variables that shall be changed to find optimal solution
Hike <- sample(0:1,10,replace=T)
Position <- sample(-2:2,10,replace=T)
# Objective function
hikes_till_now <- cumsum(Hike) - Hike
PostHike <- numeric(10)
for (i in seq_along(Hike)){
PostHike[i] <- 99.60 - 0.25*(Hike[i]*(1-DTM[i]/DIM[i]))
if(i>1) {
PostHike[i] <- PostHike[i] - 0.25*hikes_till_now[i]
}
}
Pnl <- Position*(PostHike-Price)
# Snapshot of data
all.data <- data.frame(DTM,DIM,Price,Hike,Position,Pnl)
all.data
# DTM DIM Price Hike Position Pnl
# 1 3 30 99.60000 1 2 -0.4500000
# 2 11 30 99.53333 1 2 -0.6833333
# 3 29 30 99.46667 1 2 -0.7500000
# 4 16 30 99.40000 1 -2 1.3333333
# 5 25 30 99.33333 0 2 -1.4666667
# 6 5 30 99.26667 1 1 -0.8750000
# 7 3 30 99.20000 0 -1 0.8500000
# 8 8 30 99.13333 0 0 0.0000000
# 9 22 30 99.06667 0 -2 1.4333333
# 10 11 30 99.00000 0 -2 1.3000000
因此,代码的第一部分包含我系统的输入 - DTM
,DIM
&amp; Price
。
第二部分包含我想要修改的变量以找到最佳解决方案 - Hike
&amp; Position
。这些值已如上所述启动。
最后一部分包括我必须做的计算才能达到我的目标函数,即最大化 Pnl
。
我也有一些限制 -
Hike
的总和应小于4 Position
的总和应为0,每个Position
值应介于-2和2之间。 2 我之前曾在GAMS和MATLAB工作,但我无法在此处进行优化。我已经通过Rsymphony
包和this answer中的示例,但我无法让它们用于多个变量输入。
帮助表示赞赏。