Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有任意约束的R中的优化问题_R_Optimization_Constraints_Mathematical Optimization_Nonlinear Optimization - Fatal编程技术网

具有任意约束的R中的优化问题

具有任意约束的R中的优化问题,r,optimization,constraints,mathematical-optimization,nonlinear-optimization,R,Optimization,Constraints,Mathematical Optimization,Nonlinear Optimization,我已经在Excel中完成了,但需要在R中运行适当的模拟 我需要最小化函数F(x)(x是一个向量),同时有sum(x)=1的约束,x中的所有值都是[0,1]和另一个函数G(x)>G_0 我已经用optim和constrOptim试过了。他们都没有给你这个选择 您所指的问题(大概)是一个具有非线性约束的非线性优化。这是最普遍的优化问题之一 我用于这些目的的包称为nloptr:。根据我的经验,它既通用又快速。您可以通过相应地设置eval_g_eq和eval_g_ineq来指定等式和不等式约束。如果雅可

我已经在Excel中完成了,但需要在R中运行适当的模拟

我需要最小化函数
F(x)
x
是一个向量),同时有
sum(x)=1
的约束,
x
中的所有值都是
[0,1]
和另一个函数
G(x)>G_0


我已经用
optim
constrOptim
试过了。他们都没有给你这个选择

您所指的问题(大概)是一个具有非线性约束的非线性优化。这是最普遍的优化问题之一

我用于这些目的的包称为
nloptr
:。根据我的经验,它既通用又快速。您可以通过相应地设置
eval_g_eq
eval_g_ineq
来指定等式和不等式约束。如果雅可比矩阵是明确已知的(可以解析推导),则指定它们以加快收敛速度;否则,使用数值近似


用作优化问题的一般参考。

使用编写方程组,然后使用R命令进行求解

您可以在OpenMx软件包中实现这一点(目前位于下面列出的站点上。目标是今年在cran上实现2.0 relase)

它是一个通用软件包,主要用于结构方程建模,但处理非线性约束

对于您的情况,使用mxAlgebras()中表示的代数和mxConstraints()中的约束创建mxModel()

在运行模型时,如果可能,代数将在约束范围内求解


目前这一点太模糊了,您需要提供一个代表问题复杂性的数据和目标函数的示例。@Ishouldbuyabot我在下面tonytonov的评论中给出了更多细节。谢谢你,谢谢你。看起来我需要的是
nloptr
。但是,我不知道如何将参数传递给用户定义的目标和约束函数。例如,我要优化的值是x,eval_f(x,y,A),eval_g_ineq(x,A)和eval_g_eq(x)。A是一个矩阵。看起来
nloptr
无法识别哪个参数指向哪个函数。。我将给你一个例子:我优化f(x,y,A)。x、 y向量,A矩阵。1-sum(x)=0-eval_g_eq.sum(y/3)-sum(y*x)对于单个向量
x
,所有函数定义应类似
function(x)
。如果有两个向量,
x
y
,则在传递到
eval\u f
之前,将它们组合成
c(x,y)
。同样的技巧也适用于矩阵
A
。谢谢@tonytonov。“..”表示将传递给用户定义的目标和约束函数的参数。在示例中,他们有
eval\u f0,我鼓励您单独问这个问题,链接到这里。不要忘记接受其中一个建议的答案。在一个新问题中,指定您的最小可重复问题,您的问题将得到更多关注。