DEoptimを使用して目的関数を最小化しようとしていますが、単純な制約があります。 DEoptimの呼び出しに単純な制約を追加する方法については明確ではありません。次のようにR:DEoptimに制約を追加する方法
obj_min <- function(n,in_data) {
gamma <- in_data$Gamma
delta <- in_data$Delta
theta <- in_data$Theta
gammaSum <- sum(n * gamma)
deltaSum <- sum(n * delta)
thetaSum <- sum(n * theta)
abs((EPC * gammaSum - 2 * abs(deltaSum))/thetaSum)
}
私のマッピング機能(整数制約を課すこと)されています:ここでの目的関数である
mappingFun <- function(x) {
x[1:length(x)] <- round(x[1:length(x)], 0)
}
DEoptimへの私の呼び出しは次のとおりです。
out <- DEoptim(DTRRR_min, lower = c(rep(-5, length(in_data[, 1]))),
upper = c(rep(5, length(in_data[, 1]))),
fnMap = mappingFun, DEoptim.control(trace = F),in_data)
マイIN_DATAオブジェクト
(データフレーム)は:Underlying.Price Delta Gamma Theta Vega Rho Implied.Volatility
1 40.69 0.9237 3.2188 -0.7111 2.0493 0.0033 0.3119
2 40.69 0.7713 6.2267 -1.6352 4.3240 0.0032 0.3402
3 40.69 0.5822 8.4631 -2.0019 5.5782 0.0338 0.3229
4 40.69 0.3642 8.5186 -1.8403 5.3661 0.0210 0.3086
5 40.69 0.1802 6.1968 -1.2366 3.7517 0.0093 0.2966
私は、という単純な制約を追加したいと思います:、言い換えれば
sum(n * delta) = target
最適化されたパラメータの合計を、nは、ある種のターゲットに私のIN_DATAデータフレームの合計でデルタを掛けました。簡単にするために、単に0.5と言うことができます。どのようにすればいいですか?
sum(n * delta) = 0.5
ご協力ありがとうございました!
ありがとう、これは理にかなっています。 Rのこの特定の制約付き最適化を解決するために私が取ることのできるアプローチについて別の提案がありますか? –
また、プログラムでLegrange乗数のバージョンを使用するにはどうすればよいですか?言い換えれば、ラムダはこの場合の方程式乗数(終わりまでの手段)ですが、Rには単なる別の未定義変数です。 Rに最小化を続行させ、ラムダを解きほぐし、最終的に最適化された解に到達するにはどうすればよいのでしょうか?言い換えれば、私は紙面上でラグランジュ乗数を行うことができます。この最適化問題の文脈でRにそれをどうやって行なわせるのですか? –
最初の質問については、http://stackoverflow.com/questions/38404309/setting-variables-to-a-value-using-linear-programming-in-r/38404428#38404428にLambdaパラメータを設定する必要があります試行錯誤によって選ばれたので、私はそれを解決策ではなくハックと呼んだのです。 – abhiieor