Excel进化算法是否类似于R中的DEoptim?

问题描述 投票:0回答:0

我正在尝试在 R 中使用

DEoptim
来解决最小化问题。以前,我使用 Excel 的求解器工具,尤其是进化求解器技术。但是
DEoptim
的结果不匹配,并且经常提供接近给定参数上限的答案。

问题陈述 我通过最小化函数 $f(q_1,q_2, lpha_1, lpha_2)$

中表示的平方差来定义问题

目标函数: $$f(q_1,q_2, lpha_1, lpha_2)= rac{1}{5}\sum\limits_{i = 1}^{5} (b_{i} - b_{mod_{i}})^ 2$$

有界限:

较低 = c(1000, 1000, 0.8, 1.4) 上 = c(1e10, 1e35, 1.5, 15.0)

在哪里, $$b_{mod,i} = q_{1} \lambda_i^{- lpha_1} + q_{2} \lambda_i^{- lpha_2}$$

和$\lambda_i = c(375, 470, 528, 625, 880)$是5个通道的波长, $b_i = c(228,124,98,67,44)$表示每个波长对应的光吸收量度

这里 $b_i$ 是来自设备的测量值,$b_{mod,i}$ 是通过优化过程实现的建模值。

查询

我正在尝试在 R 中使用这种技术来解决物理问题。

  • DEoptim
    是定义问题的好选择吗?
  • 关于使用 R 解决这个问题有什么建议吗?
  • 还有其他优化技术可以解决目前的问题吗?

方法 1:Excel 求解器

在 Excel 求解器中,我使用了内置“进化”算法的非线性求解器函数。优化值 $q_1, lpha_1,q_2, lpha_2$ 似乎是合理的。

方法 2:在 R 中使用

DEoptim

我发现Excel中的进化算法是基于差分进化算法的,而在R中有一个名为

DEoptim
Link)的包。此外,我需要为一个大型数据集运行优化过程,其中数据的每个时间戳代表 $b$。然而,
DEoptim
结果被发现非常接近上限,并且通常对提供的界限非常敏感。

## Values:
b = c(858.3302, 523.2456, 429.2651, 310.0678, 222.0470)

## Define Objective Function
obj_fun = function(x){
            return(0.2*((b[1] - (x[1]*(375^(-x[2])) + x[3]*(375^(-x[4]))))^2 +
                  (b[2] - (x[1]*(470^(-x[2])) + x[3]*(470^(-x[4]))))^2 +
                  (b[3] - (x[1]*(528^(-x[2])) + x[3]*(528^(-x[4]))))^2 +
                  (b[4] - (x[1]*(625^(-x[2])) + x[3]*(625^(-x[4]))))^2 +
                  (b[5] - (x[1]*(880^(-x[2])) + x[3]*(880^(-x[4]))))^2))
  }

## Define Bounds
lower = c(1000, 1.5, 1000, 0.8)
upper = c(1e35, 15.0, 1e10, 1.4)

## Control Params
control.param = DEoptim.control(list(trace=0, parallelType = "parallel"))

## Run DEoptim
result = DEoptim(obj_fun, lower, upper, control.param)

## See Result

result$optim$bestmem

        par1         par2         par3         par4 
4.677653e+34 1.133396e+01 2.119513e+09 1.382064e+00 


Excel 求解器结果: par1 par2 par3 par4 1.782904e+27 9.5913123 144797.964 0.9558152715

r nonlinear-optimization evolutionary-algorithm excel-solver deoptimization
© www.soinside.com 2019 - 2024. All rights reserved.