标签: nonlinear-optimization

线性规划约束“x >= c 或 x = 0”

我想表达一个线性程序,其变量只能大于或等于常数 c 或等于 0。范围 ]0; c[ 是不允许的。

您是否知道一种在线性程序中表达此约束的方法,并且可以使用未经修改的单纯形实现来解决该约束?

例如此约束:x1 >= 4 或 x1 = 0。

线性程序中所有约束之间的典型关系是 AND。这是两个约束之间的或。

注意:我需要以计算有效的方式解决具有多个变量的问题。

mathematical-optimization linear-programming nonlinear-optimization

2
推荐指数
1
解决办法
4781
查看次数

如何在 ceres 中为同一解决方案创建不同的求解器块?

我想用ceres来计算三角形坐标。

对于这个问题,我需要解决网格中的网格坐标。每个三角形都有自己的顶点,但可以使用三角形(3 个顶点)和边(4 个顶点)等结构。

示例数据(伪代码):

triangles = [[v1, v2, v3], [v4, v5, v6]]
inner_edges = [[[v1, v4], [v2, v5]]]
Run Code Online (Sandbox Code Playgroud)

[v1, v2][v4, v5]最初是相同的,在求解过程中可能会发生变化。

现在我有两个成本函数,一个在三角形上,一个在内边缘上

f([v1, v2, v3]) = res_t1
g([v1, v4, v2, v5]) = res_2
Run Code Online (Sandbox Code Playgroud)

有两种简单的块结构

  • 两个块,一个包含所有三角形残差,一个包含所有边残差。
  • 每个三角形一个块,每个边一个块。

第一个求解具有x所有坐标的向量(2*|V|因为每个顶点有两个坐标),因为块依赖于所有顶点。在第二个中,三角形块应该仅依赖于三个顶点,而边缘块应该依赖于四个顶点。我现在想使用第二个,因为我期望更好的性能和更好的收敛性。

如何设置 ceres 来求解相同的坐标,但仅考虑与当前残差相关的顶点子集?

我尝试使用大小 6 和 8 以及位于正确位置的指针来设置问题x,但 ceres 不允许使用具有不同偏移量的相同结果指针。

接下来我尝试使用SubsetParameterization这样的例子

vector<double> x(mesh.n_faces()*6);
for(int i=0; i < mesh.n_faces(); i++){
    vector<int> const_params;
    for(int j = 0; j < mesh.n_faces(); …
Run Code Online (Sandbox Code Playgroud)

c++ nonlinear-optimization ceres-solver

2
推荐指数
1
解决办法
1349
查看次数

适合指数或曲棍球棒腐烂

我正在尝试找到一个适合我的数据的方程式.我认识到形状,y=-exp(x)nls(y~-a*exp(x*b))各种参数起始值失败.y是负的,因此log(y)~log(a)+ b x的"简单"拟合效果不佳.我尝试了log(y + 2)~a + b x来使所有东西都正面但是没有产生正确的形状.

有人能为这些数据提供一些帮助吗?谢谢!

我的数据

Y = swediff

X = avgdate

dat2=structure(list(swediff = c(0.0379635202678687, 0.0845477936160927, 
0.146010217481196, 0.0416237104326292, 0.0659140490644253, 0.134535534695029, 
0.0095147654468483, 0.238456044233877, 0.276025694437364, 0.29435448415394, 
0.00301157777812485, 0.19171002685605, 0.277759059448242, 0.00400780564144798, 
0.342605838471721, 0.236804884903432, 0.151048712082562, 0.188620966368049, 
-0.0615972418208484, -0.00184933102124457, -0.0163171325413688, 
0.00370250929658511, 0.30014673206306, 0.135354035472228, 0.00699671782210069, 
0.0174510674253347, -0.0145499677497698, 0.0113155610814752, 
-0.0683884523999768, 0.20157093417998, 0.186320361855075, -0.115609443650563, 
0.069177592825418, -0.0161221161393796, 0.150181081582068, 0.0632121126749741, 
0.0769960292118834, 0.061783685314432, 0.0442014176783082, -0.00990798027657931, 
-0.00186219548019918, 0.0274216740478325, 0.118878480695049, 
0.0592089915185285, -0.00823096478874009, 0.120750948230554, 
0.278594307094423, -0.0111994006625954, 0.0379360193757585, 6.29460162030332e-05, 
0.0602068958909111, 0.173755367986025, 0.135902420389977, 0.124863098282806, …
Run Code Online (Sandbox Code Playgroud)

r nls nonlinear-optimization

1
推荐指数
1
解决办法
437
查看次数

给出2000 dim变量时,scipy.optimize.minimize('SLSQP')太慢了

我有一个带有约束和上/下界限的非lenear优化问题,所以scipy我必须使用SLSQP.问题显然不凸.我得到了jacobian的目标和约束函数才能正常工作(结果很好/快到300输入向量).所有功能都经过矢量化和调整,以便快速运行.问题是使用1000+输入向量需要很长时间,虽然我可以看到最小化器不是很多地调用我的函数(目标/约束/渐变)并且似乎在内部花费大部分处理时间.我在某地读到了SLSQP的性能是O(n ^ 3).

是否有更好/更快的SLSQP实现或针对python的此类问题的另一种方法?我尝试使用nlopt并以某种方式返回错误的结果,因为我在scipy中使用了完全相同的函数(使用包装器来适应其方法签名).我也没有使用ipopt与pyipopt包,无法使用ipopt二进制文件与python包装器一起工作.

更新:如果它有帮助,我的输入变量基本上是(x,y)元组的向量或表示坐标的2D表面中的点.有了1000分,我最终得到了2000暗淡的输入向量.我想要优化的函数计算彼此之间的点的最佳位置,同时考虑它们的关系和其他约束.所以问题不是稀疏的.

谢谢...

python optimization nonlinear-optimization

1
推荐指数
2
解决办法
2989
查看次数

等分曲线下面积

我有 ay = sin(x) 曲线,x 在 0 和 pi 之间(第一象限 - 无负值)。像这样的东西:

在此输入图像描述

我想将曲线下的面积平均划分为n块,并获取每块的(最大)x 值。

任何关于算法的想法将不胜感激。

algorithm math nonlinear-optimization

1
推荐指数
1
解决办法
829
查看次数