问题标签 [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.

0 投票
1 回答
2824 浏览

matlab - 在 MatLab 中制定求和目标函数以最小化 fmincon

我有一个求和目标函数(非线性投资组合优化),如下所示:

  • w是决策向量
  • cv是一个已知的 10 x 10 矩阵

我已经为约束(项目约束的单独 .m 文件)和 fmincon 的执行(下/上限、初始值和使用参数调用 fmincon 的单独 .m 文件)制定了公式。

我只是不知道如何做目标函数。我习惯于在 GLPK 而不是 matlab 中进行线性编程,所以我做得不太好。

我目前得到:

目标函数.m

...但这不起作用。

任何帮助,将不胜感激!提前致谢 :)

0 投票
1 回答
332 浏览

c++ - 特征错误:please_protect_your_min_with_parentheses

我正在尝试通过运行包附带的测试代码来测试 Eigen 的非线性优化功能。

我对这些错误感到困惑(更像是困惑):

顺便说一下(我认为)导致这种情况的线路是这样的:

并且错误指的是这一行(在上面提到的 2 个不同的地方,即第 28 行和第 184 行):

任何建议都将不胜感激

0 投票
1 回答
498 浏览

r - R函数搜索函数

更新:最初的问题是:是否有一个 R 函数使用在 matlab 中的“lsqnonlin”函数中实现的相同算法?但是,答案与在 R 中搜索函数更相关。我认为答案通常对 R 用户非常有帮助。所以我编辑了标题,但在这里再次问了原来的问题:在 R 中,如何进行涉及求解微分方程的非线性最小二乘优化?

我正在做非线性最小二乘优化,发现 matlab 函数lsqnonlin比我在 R 中尝试过的所有优化算法(包括函数optimxnlmnlminbsolnp等)执行得更好,因为它更快并且发现“更多正确”的解决方案。

但是,我没有在 R 中找到在 Matlab 中使用的“信任区域反射”算法的实现。有人知道是否已经有实现吗?此外,“信任区域反射”算法是否总是这种优化的更好算法?

0 投票
3 回答
140 浏览

mathematical-optimization - 从项目集合中进行选择以满足特定的特征目标优化

我无法解决包括从集合中选择项目的问题。

我有一个项目集合,每个项目都有三个特征,比如 X、Y 和 Z,它们有一个 double 值

我有几个目标:

1) 达到所选项目的所有 X 值之和的特定下限。

2) 达到所选项目的所有 Y 值之和的特定下限。

3) 达到所选项目的所有 Z 值的平均值的特定下限。

4)尽量减少仍满足上述要求的项目的选择。

我不确定要尝试哪种类型的优化算法,任何正确方向的指针都将不胜感激。如果可能的话,我想以某种方式优先考虑我的目标并使我的界限像“软”一样,即使它们不能同时满足,仍然会返回一个“接近”的选择。

0 投票
0 回答
129 浏览

nonlinear-optimization - 不等式和有界约束的优化

我想用不等式和有界约束进行优化:

最大化f= SEA (a,b,c,d)

有约束

根据文献,fmincon 是一个合适的选择。但是,在 Minitab 帮助中,示例在不等式和有界约束之间是分开的。我如何使用这两种类型的约束在 matlab 中编写这个问题?

0 投票
1 回答
823 浏览

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.

任何建议都会有所帮助。提前致谢。米查

0 投票
2 回答
621 浏览

c++ - 寻找物体浮动状态的优化方法

要解决的问题是在给定重量和重心的情况下找到浮体的漂浮状态。

我使用的函数计算给定下沉、脚跟和修剪的身体的位移体积和浮力中心。其中下沉是一个长度单位,而后跟/修剪是一个限制在 -90 到 90 之间的角度。

三个变量的说明

当位移体积与重量相等且重心与浮心在一条垂直线上时,即为漂浮状态。

我将此实现为具有 3 个变量(下沉、修剪、鞋跟)和 3 个方程的非线性 Newton-Raphson 求根问题。此方法有效,但需要良好的初始猜测。所以我希望找到更好的方法,或者找到初始值的好方法。

下面是用于 Newton-Raphson 迭代的牛顿和雅可比算法的代码。函数volume接受参数sinkage、heel和trim。并返回体积和浮力中心的坐标。

我还包括了 maxabs 和 GSolve2 算法,我相信这些是取自 Numerical Recipies。

0 投票
1 回答
4128 浏览

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
  • solnpRsolnp

我也尝试了其他一些,但没有在这里展示。

我的问题总结

  • R 中是否有可靠的函数/算法可供使用,例如lsqnonlin在 Matlab 中可以解决我的非线性最小二乘问题类型?(我找不到一个。)
  • 对于一个简单的案例,不同的优化达到不同的解决方案的原因是什么?
  • 是什么让lsqnonlinR 中的功能更胜一筹?信任区域反射算法或其他原因?
  • 有没有更好的方法来解决我的问题类型,以不同的方式制定?也许有一个非常简单的解决方案,但我只是不知道。

示例 1:一个简单的案例

我会先给出R代码,稍后再解释。 示例 1 的拟合图

最后一行的输出是:

除了“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 任务视图页面,只有包trusttrustOptimminqa 实现了基于信任区域的方法。但是,trust并且trustOptim需要梯度和粗麻布。bobyqaminqa似乎不是我要找的那个。根据我的个人经验,与我在 R 中尝试的算法相比,Matlab 中的信任区域反射算法通常表现更好。所以我试图在 R 中找到该算法的类似实现。

我在这里问了一个相关的问题:R function to search for a function

Matthew Plourde 提供的答案lsqnonlin在 Matlab 中给出了一个具有相同函数名称的函数,但没有实现 trust-region-reflective 算法。我编辑了旧的并在这里提出了一个新问题,因为我认为 Matthew Plourde 的回答通常对正在寻找功能的 R 用户非常有帮助。

我再次搜索并没有运气。是否还有一些功能/包可以实现类似的 matlab 功能。如果没有,我想知道是否允许我将 Matlab 函数直接翻译成 R 并用于我自己的目的。

0 投票
1 回答
878 浏览

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"){

0 投票
4 回答
191 浏览

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 之间