基于NSGA-II的约束优化算法在R

基于NSGA-II的约束优化算法在R,r,optimization,constraints,genetic-algorithm,portfolio,R,Optimization,Constraints,Genetic Algorithm,Portfolio,我在R中使用NSGA-II进行了一些优化,以构建权重总和必须为1的金融投资组合。我的问题在于我不能有效地设置约束。我曾经通过在目标函数中使用惩罚来实现约束,但这不起作用,因为我最终无法分析获得的目标。虽然我获得了很好的结果(参数/权重),但目标完全受到惩罚的影响 作为一个例子,我为您提供了一个简单的均值-方差优化问题,但碰巧我优化了多达4个目标,以类似的方式陈述 library(nsga2r) fitness_meanvar <- function(x){ #max mean, min

我在R中使用NSGA-II进行了一些优化,以构建权重总和必须为1的金融投资组合。我的问题在于我不能有效地设置约束。我曾经通过在目标函数中使用惩罚来实现约束,但这不起作用,因为我最终无法分析获得的目标。虽然我获得了很好的结果(参数/权重),但目标完全受到惩罚的影响

作为一个例子,我为您提供了一个简单的均值-方差优化问题,但碰巧我优化了多达4个目标,以类似的方式陈述

library(nsga2r)

fitness_meanvar <- function(x){  #max mean, min var
  weight_stock <- x
  f1 <- numeric()
  for (i in 1:6) {
    f1[i] <- weight_stock[i]*factors_mean[i]
  }
  mean_return <- sum(f1)-1e12*(round(sum(weight_stock),10)-1)^2
  f2 <- numeric()
  for (i in 1:6) {
    f3 <- numeric()

    for (j in 1:6) {
      f3[j] <- weight_stock[i]*weight_stock[j]*factors_cov[i,j]
    }
    f2[i] <- sum(f3)
  }
  risk <- sum(f2)+1e12*(round(sum(weight_stock),10)-1)^2
  return(c(-mean_return, risk))
  }

meanvar_optim <- nsga2R(fn = fitness_meanvar, varNo = n_asset, objDim = 2, generations = genn,
                          mprob = mutp, popSize = popn, cprob = crossp,
                          lowerBounds = rep(0, n_asset), upperBounds = rep(1, n_asset)) 
库(nsga2r)

适应度-均值-方差组合问题通常使用QP(二次规划)求解器解决。不需要启发式,我还通过添加其他要最小化和最大化的变量进行优化。有些来自回报本身,另一些来自公司的基本面标准MV问题有两个目标:风险和回报。这可以扩展到更多的目标(当然,在计算上需要更多的工作来追踪帕累托前沿)。我在
quadprog
中找不到其他目标的任何规范。对于固定λ,我们有一个标准的QP目标。均值-方差投资组合问题通常用QP(二次规划)解算器来解决。不需要启发式,我还通过添加其他要最小化和最大化的变量进行优化。有些来自回报本身,另一些来自公司的基本面标准MV问题有两个目标:风险和回报。这可以扩展到更多的目标(当然,在计算上需要更多的工作来追踪帕累托前沿)。我在
quadprog
中找不到其他目标的任何规范。对于固定λ,我们有一个标准的QP目标。