首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化( R)的多目标优化

优化( R)的多目标优化
EN

Stack Overflow用户
提问于 2016-06-15 22:01:19
回答 1查看 1.7K关注 0票数 2

我没有什么数学背景,我正在尝试写一个多目标优化函数.

我有以下三个向量:

代码语言:javascript
复制
A = 0.4122487 0.3861316 0.3160613 0.2949684
B = 0.1407469 0.1828053 0.2088941 0.2143583
C = 0.2966363 0.1947112 0.1664350 0.1543946

我的目标是:找到最符合我的需求的值X: 1)最小化A,2)最大化B,3)最大化C。

这是我的代码:

代码语言:javascript
复制
fun <- function(weights,A,B,C){
   fit = sum((weights[1] * A +
        weights[2] * B +
        weights[3] * C))
    return(fit)
}

# the weight of A (positive, since I want to minimise A)
Wa = 1
# the weight of B (negative, since I want to maximise B)
Wb = -0.5
# the weight of C (negative, since I want to maximise C)
Wc = -1.5
result <- optim(weights=c(Wa,Wb,Wc), fn = fun)

以下是研究结果:

代码语言:javascript
复制
result$par = 2.365022e+44 -1.697108e+44 -9.150244e+43
result$value = -5.343856e+44

我的实现正确吗?我如何解释这些结果?我的理解非常有限,但与我最初的向量范围相比,这些数字似乎不成比例.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-16 00:42:56

答案:

实现失败的方式如下:par[1] * A是四个元素的向量,par[2] * Bpar[3] * [C]也是。您的函数fun首先计算三个向量的和,然后再和它的元素。

函数optim()试图找到向量par的参数,这些参数返回函数的返回值是最低的。这意味着它使向量A的最大乘以par[1],使向量B和C的和最小,乘以par[2]par[3]

当您只是在没有其他约束的情况下最大化par[1]和最小化par[2]par[3]时,答案就会非常相似。数学答案将是无穷大,但函数optim()似乎达到了最大可计算值,例如2.36 *10^44 (科学符号)。

这种方式不能满足您的需要,需要以其他方式实现。

解决方案:

很难定义你真正想要做的事情: A,B,C是离散向量,还是它们在绘制时应该代表函数?换句话说,您的解决方案应该使用这些向量的确切值,或者在这些向量之间使用什么?在提供这些信息之后,可能会在某个地方找到解决该问题的可能办法。

编辑:下面添加了解决方案

使用optim() here进行离散优化时存在堆栈溢出问题。但我觉得这次杀老鼠的坦克太大了。

我将在数据帧中计算一个函数的值,并使用max()找到最佳选择:

代码语言:javascript
复制
# sample data:
A <- c(0.4122487, 0.3861316, 0.3160613, 0.2949684)
B <- c(0.1407469, 0.1828053, 0.2088941, 0.2143583)
C <- c(0.2966363, 0.1947112, 0.1664350, 0.1543946)
df <- data.frame(A = A, B = B, C = C)

#solution
df$fun <- df$A - df$B - df$C 
head(df)
df[df$fun == max(df$fun),]

如果你只想学习一些东西的话,你也可以在谷歌找到一些使用optim()的教程。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37846544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档