问题标签 [nonlinear-optimization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
matlab - 在 MatLab 中制定求和目标函数以最小化 fmincon
我有一个求和目标函数(非线性投资组合优化),如下所示:
- w是决策向量
- cv是一个已知的 10 x 10 矩阵
我已经为约束(项目约束的单独 .m 文件)和 fmincon 的执行(下/上限、初始值和使用参数调用 fmincon 的单独 .m 文件)制定了公式。
我只是不知道如何做目标函数。我习惯于在 GLPK 而不是 matlab 中进行线性编程,所以我做得不太好。
我目前得到:
目标函数.m
...但这不起作用。
任何帮助,将不胜感激!提前致谢 :)
c++ - 特征错误:please_protect_your_min_with_parentheses
我正在尝试通过运行包附带的测试代码来测试 Eigen 的非线性优化功能。
我对这些错误感到困惑(更像是困惑):
顺便说一下(我认为)导致这种情况的线路是这样的:
并且错误指的是这一行(在上面提到的 2 个不同的地方,即第 28 行和第 184 行):
任何建议都将不胜感激
r - R函数搜索函数
更新:最初的问题是:是否有一个 R 函数使用在 matlab 中的“lsqnonlin”函数中实现的相同算法?但是,答案与在 R 中搜索函数更相关。我认为答案通常对 R 用户非常有帮助。所以我编辑了标题,但在这里再次问了原来的问题:在 R 中,如何进行涉及求解微分方程的非线性最小二乘优化?
我正在做非线性最小二乘优化,发现 matlab 函数lsqnonlin
比我在 R 中尝试过的所有优化算法(包括函数optimx
、nlm
、nlminb
、solnp
等)执行得更好,因为它更快并且发现“更多正确”的解决方案。
但是,我没有在 R 中找到在 Matlab 中使用的“信任区域反射”算法的实现。有人知道是否已经有实现吗?此外,“信任区域反射”算法是否总是这种优化的更好算法?
mathematical-optimization - 从项目集合中进行选择以满足特定的特征目标优化
我无法解决包括从集合中选择项目的问题。
我有一个项目集合,每个项目都有三个特征,比如 X、Y 和 Z,它们有一个 double 值
我有几个目标:
1) 达到所选项目的所有 X 值之和的特定下限。
2) 达到所选项目的所有 Y 值之和的特定下限。
3) 达到所选项目的所有 Z 值的平均值的特定下限。
4)尽量减少仍满足上述要求的项目的选择。
我不确定要尝试哪种类型的优化算法,任何正确方向的指针都将不胜感激。如果可能的话,我想以某种方式优先考虑我的目标并使我的界限像“软”一样,即使它们不能同时满足,仍然会返回一个“接近”的选择。
nonlinear-optimization - 不等式和有界约束的优化
我想用不等式和有界约束进行优化:
最大化f= SEA (a,b,c,d)
有约束
根据文献,fmincon 是一个合适的选择。但是,在 Minitab 帮助中,示例在不等式和有界约束之间是分开的。我如何使用这两种类型的约束在 matlab 中编写这个问题?
r - 在“R”中更改 nls.lm() 中的目标函数
我正在使用函数 nls.lm {package: minpack.lm} 来优化水文模型的参数化。该功能运行良好,但我想使用另一个objective function (OF)
. 通常,nls.lm 中的目标函数“fn”定义为
现在我想使用Nash-Sutcliff-Efficiency
定义为
或其他OF。问题是nls.lm
最小化表达式sum(x)^2
,只有x
是可修改的。我知道best fit NSE = 1
. 因此1 - NSE
产生了一个真正的最小化问题。
顺便说一句:nls.lm
帮助页面中的示例 1是一个很好的示例;那里
被最小化,实际上意味着什么
被nls.lm
函数最小化,而getPred(p,xx)
返回sim
.
任何建议都会有所帮助。提前致谢。米查
c++ - 寻找物体浮动状态的优化方法
要解决的问题是在给定重量和重心的情况下找到浮体的漂浮状态。
我使用的函数计算给定下沉、脚跟和修剪的身体的位移体积和浮力中心。其中下沉是一个长度单位,而后跟/修剪是一个限制在 -90 到 90 之间的角度。
当位移体积与重量相等且重心与浮心在一条垂直线上时,即为漂浮状态。
我将此实现为具有 3 个变量(下沉、修剪、鞋跟)和 3 个方程的非线性 Newton-Raphson 求根问题。此方法有效,但需要良好的初始猜测。所以我希望找到更好的方法,或者找到初始值的好方法。
下面是用于 Newton-Raphson 迭代的牛顿和雅可比算法的代码。函数volume接受参数sinkage、heel和trim。并返回体积和浮力中心的坐标。
我还包括了 maxabs 和 GSolve2 算法,我相信这些是取自 Numerical Recipies。
r - 在 R 中,如何进行涉及求解微分方程的非线性最小二乘优化?
更新可重现的例子来说明我的问题
我最初的问题是“在 R 中实现信任区域反射优化算法”。但是,在生成可重现示例的过程中(感谢@Ben 的建议),我意识到我的问题是在 Matlab 中,一个函数lsqnonlin
对于我拥有的大多数情况来说,它是好的(意味着不需要选择一个好的起始值,速度很快),而在 R 中,没有这样一个万能的功能。不同的优化算法在不同的情况下效果很好。不同的算法得出不同的解决方案。这背后的原因可能不是R中的优化算法不如Matlab中的trust-region-reflective算法,也可能与R如何处理自动微分有关。这个问题其实源于两年前的工作中断。当时,包optimx的作者之一 John C Nash 教授有人建议,Matlab 已经为自动微分做了大量工作,这可能是 Matlab lsqnonlin 比 R 中的优化函数/算法执行得更好的原因。我无法用我的知识弄清楚。
下面的示例显示了我遇到的一些问题(更多可重现的示例即将出现)。要运行示例,首先运行install_github("KineticEval","zhenglei-gao")
. 您需要安装包mkin及其依赖项,并且可能还需要为不同的优化算法安装一堆其他包。
lsqnonlin
基本上,我正在尝试解决 Matlab 函数文档(http://www.mathworks.de/de/help/optim/ug/lsqnonlin.html)中描述的非线性最小二乘曲线拟合问题。在我的例子中,曲线是由一组微分方程建模的。我将通过示例进行更多解释。我尝试过的优化算法包括:
- 来自
nls.lm
列文堡-马夸特的马克 - 港口从
nlm.inb
- L-BGFS-B 从
optim
- spg 来自
optimx
solnp
包Rsolnp
我也尝试了其他一些,但没有在这里展示。
我的问题总结
- R 中是否有可靠的函数/算法可供使用,例如
lsqnonlin
在 Matlab 中可以解决我的非线性最小二乘问题类型?(我找不到一个。) - 对于一个简单的案例,不同的优化达到不同的解决方案的原因是什么?
- 是什么让
lsqnonlin
R 中的功能更胜一筹?信任区域反射算法或其他原因? - 有没有更好的方法来解决我的问题类型,以不同的方式制定?也许有一个非常简单的解决方案,但我只是不知道。
示例 1:一个简单的案例
我会先给出R代码,稍后再解释。
最后一行的输出是:
除了“Marq”和“solnp”之外,其他算法都没有达到最优。此外,'spg'方法(还有'bobyqa'等其他方法)对于这种简单的情况需要太多的函数评估。此外,如果我更改起始值并制作k_Parent=0.0058
(该参数的最佳值)而不是随机选择的0.1
,“Marq”再也找不到最佳值了!(下面提供的代码)。我也有“solnp”找不到最佳值的数据集。但是,如果我lsqnonlin
在 Matlab 中使用,对于这种简单的情况,我没有遇到任何困难。
现在最后一行的输出是:
我将在这里解释我正在优化的内容。如果您已运行上述脚本并查看曲线,我们将使用具有一阶反应的二室模型来描述曲线。表达模型的微分方程在ex1$diffs
:
对于这个简单的例子,我们可以从微分方程推导出描述两条曲线的方程。要优化的参数是$M_0,k_p, k_m, c=\mbox{FF_parent_to_Met} $
带约束的$M_0>0,k_p>0, k_m>0, 1> c >0$
。
因此,我们可以在不求解微分方程的情况下拟合曲线。
这样做,经过的时间几乎为0,达到了最佳状态。然而,我们并不总是有这种简单的情况。该模型可能很复杂,需要求解微分方程。参见示例 2
例子2,一个复杂的模型
我很久以前就处理过这个数据集,没有时间自己完成以下脚本的运行。(您可能需要几个小时才能完成跑步。)
这是一个示例,您将看到如下警告消息:
原来的问题
Matlab 优化工具箱求解器中使用的许多方法都基于信任区域。根据 CRAN 任务视图页面,只有包trust、trustOptim、minqa 实现了基于信任区域的方法。但是,trust
并且trustOptim
需要梯度和粗麻布。bobyqa
在minqa似乎不是我要找的那个。根据我的个人经验,与我在 R 中尝试的算法相比,Matlab 中的信任区域反射算法通常表现更好。所以我试图在 R 中找到该算法的类似实现。
我在这里问了一个相关的问题:R function to search for a function
Matthew Plourde 提供的答案lsqnonlin
在 Matlab 中给出了一个具有相同函数名称的函数,但没有实现 trust-region-reflective 算法。我编辑了旧的并在这里提出了一个新问题,因为我认为 Matthew Plourde 的回答通常对正在寻找功能的 R 用户非常有帮助。
我再次搜索并没有运气。是否还有一些功能/包可以实现类似的 matlab 功能。如果没有,我想知道是否允许我将 Matlab 函数直接翻译成 R 并用于我自己的目的。
r - R中的非线性回归显示错误
我正在使用nlsLM
包中的 R 函数,minpack.LM
但出现以下错误。
我用噪声生成自己的信号,所以我知道所有参数,我试图使用相同的函数进行回归分析,我曾经用来生成信号。
问题是,该nlsLM
函数运行良好,它甚至可以找到正确的参数值,但最后,当它找到它们时,错误出现如下:
它。23,RSS = 14.4698,标准杆。= 42.6727 0.78112 1 65.2211 15.6065 1
它。24,RSS = 14.4698,标准杆。= 42.671 0.781102 1 65.2212 15.6069 1
stats:::nlsModel(formula, mf, start, wts) 中的错误:初始参数估计处的奇异梯度矩阵
我不知道该怎么办。请解释它可能是什么,以及我如何解决它!
附加信息:
信号生成功能
gaus_width=15, gaus_A=1,Y0=0, error=2.0, show_graph=TRUE, norm="False"){
performance - 最高效率
最大效率问题
有N个城市,有一个流浪者。
他从一个城镇到另一个城镇所花费的时间是已知的 - Txy(从城镇 x 到城镇 y)。
他可以从任何城镇去任何其他城镇,所以这是一个完整的图表。
在每个城镇都有流浪者想要收集的一定数量的货币 Mx。
穿越所有城市的时间不够。
有了总可用时间 T 和起点 i,问题是找到最好的路线,以便他收集的钱将是最大的。
输入数字范围:
- N 介于 400 和 600 之间
- Mx(M1, M2, ...) 介于 100 和 500 之间,x 介于 1 和 N 之间
- Txy 介于 80 和 200 之间,x 和 y 介于 1 和 N 之间
- Txy 是最佳时间距离,使得 Txy < Txz + Tzy,对于介于 1 和 N 之间的任何 x、y 和 z。
- T 介于 3500 和 5000 之间