我想知道是否有人有任何关于最小化函数的建议,f(x,y),其中x和y是整数.我已经研究了很多最小化和优化技术,比如BFGS和GSL中的其他技术,以及Numerical Recipes的内容.到目前为止,我已尝试实现几种不同的方案.第一种方法是选择最大下降方向f(x + 1,y),f(x-1,y),f(x,y + 1),f(x,y-1),并按照该方向线最小化.我也尝试过使用下坡单纯(Nelder-Mead)方法.两种方法都远离最低限度.它们似乎都在更简单的函数上工作,比如找到抛物面的最小值,但我认为两者,尤其是前者,都是针对x和y是实值(双精度)的函数而设计的.还有一个问题是我需要尽可能少地调用f(x,y).它与外部硬件通信,每次呼叫需要几秒钟.对此的任何想法将不胜感激.
这是错误函数的一个例子.对不起,我之前没有发帖.此功能需要几秒钟的时间来评估.此外,我们从设备查询的信息如果低于我们想要的值,则不会添加到错误中,只有当它高于我们的期望值时
double Error(x,y)
{
SetDeviceParams(x,y);
double a = QueryParamA();
double b = QueryParamB();
double c = QueryParamC();
double _fReturnable = 0;
if(a>=A_desired)
{
_fReturnable+=(A_desired-a)*(A_desired-a);
}
if(b>=B_desired)
{
_fReturnable+=(B_desired-b)*(B_desired-b);
}
if(c>=C_desired)
{
_fReturnable+=(C_desired-c)*(C_desired-c);
}
return Math.sqrt(_fReturnable)
}
Run Code Online (Sandbox Code Playgroud) 我正在寻找直接替代Ruby的Marshal能力,希望它具有以下一个或多个优于Marshal的优势:
谢谢!!
基本上,给定一个函数可以为不同的参数生成这样的输出:

我想快速找到函数等于0的第一个x.因此,使用在x上产生蓝色曲线的参数,我想找到x = 134.对于绿色曲线,我想找到x = 56等.
我认为该函数将始终单调递减,直到它达到零,但我不完全确定.
该功能不一定单调递减.
我很肯定,它将只命中0一次,然后保持为零.
目前我通过迭代x值直到我达到零来强制它,但我想要一些更好的做出有根据的猜测(基于斜率?)和迭代.
理想我想使用的东西已经出炉(因为90%的程序员甚至不能正确地写一个二进制搜索),像一些scipy.optimize,但似乎这些都希望找到无论是全球最低或零交叉.
(此功能排序RGB立方体的用于左声道的颜色空间中的给定色度distance_to_the_wall(所以基本上构建"三立夹到RGB"功能)的,但由于IRGB和LCh中之间的映射可以通过库,并与等参数而变化我认为最好只尝试几个值,直到找到正确的值,而不是试图直接反向计算值?)
我在用scipy.optimize.minimize从函数中找到最佳值。这是最简单的示例,使用内置 Rosenbrock 函数:
>>> from scipy.optimize import minimize, rosen\n>>> x0 = [1.3, 0.7, 0.8, 1.9, 1.2]\n>>> # Minimize returns a scipy.optimize.OptimizeResult object...\n>>> res = minimize(rosen, x0, method='Nelder-Mead') \n>>> print res\n status: 0\n nfev: 243\n success: True\n fun: 6.6174817088845322e-05\n x: array([ 0.99910115, 0.99820923, 0.99646346, 0.99297555, 0.98600385])\n message: 'Optimization terminated successfully.'\n nit: 141\nRun Code Online (Sandbox Code Playgroud)\n\nx只是最终的最佳输入向量。\xe2\x80\x8b我可以从返回的结果中获取所有迭代的列表(即具有相应输入向量的目标函数)scipy.optimize.OptimizeResult?
我有不同尺寸的小矩形(1cm x 2xm,2cmx3cm,4cm*6cm等).不同类型矩形的数量可根据情况而变化.每种类型的不同矩形可以具有不同数量的计数.
我需要创建一个包含所有这些小矩形的大矩形,这些小矩形只能放在边缘上.没有轮换.理想情况下,最终的外部矩形应该是方形的.X~Y.并非所有边缘都需要填满.较小的矩形之间可能存在间隙.图片示例:http:
//i.stack.imgur.com/GqI5z.png
我正在尝试编写一个代码,找出可以形成的最小可能区域.
我有一个算法循环所有可能的位置,以找出可能的最小区域.但是,随着不同类型矩形的数量和矩形数量的增加,这需要很长的运行时间.即2种类型的矩形,每种都有100 +矩形.8循环.那将是~100 ^ 8次迭代
有关更好和更快算法的任何想法,以计算最小可能区域?代码是在python中,但任何算法概念都可以.
for rectange_1_top_count in (range(0,all_rectangles[1]["count"]+1)):
for rectange_1_bottom_count in range(0,all_rectangles[1]["count"]-rectange_1_top_count+1):
for rectange_1_left_count in (range(0,all_rectangles[1]["count"]-rectange_1_top_count-rectange_1_bottom_count+1)):
for rectange_1_right_count in ([all_rectangles[1]["count"]-rectange_1_top_count-rectange_1_bottom_count-rectange_1_left_count]):
for rectange_2_top_count in (range(0,all_rectangles[2]["count"]+1)):
for rectange_2_bottom_count in (range(0,all_rectangles[2]["count"]-rectange_2_top_count+1)):
for rectange_2_left_count in (range(0,all_rectangles[2]["count"]-rectange_2_bottom_count-rectange_2_top_count+1)):
for rectange_2_right_count in [(all_rectangles[2]["count"]-rectange_2_bottom_count-rectange_2_left_count-rectange_2_top_count)]:
area=calculate_minimum_area()
if area< minimum_area:
minimum_area=area
Run Code Online (Sandbox Code Playgroud) 我正在寻找MATLAB 模式搜索优化算法的 Python 等效项。我浏览了 SCiPy 文档,但没有找到类似的内容。你知道 Python/SciPy 中是否有一些可用的模式搜索算法吗?您是否提示我还应该在哪里搜索?
我有一个节点网络排列在一个2D Grid.我想连接具有连接的节点对,然后占用2D网格上的物理空间.现在这些连接本身就是障碍,未来的连接将不得不走一条避免相交的路径.
我目前正在使用A* algorithm并逐步建立连接.虽然它找到从开始到结束节点的最短路径,但它不考虑需要进行的其他连接,因此连接所有对之后的总路径成本不是最佳的.
有谁知道是否有一种算法可以解决这个问题,或者这是一个NP完全问题?关于相关材料的任何指示也将受到赞赏.
我一直在尝试通过最小化卡方来将线性模型拟合到一组应力/应变数据。不幸的是,使用下面的代码并不能正确地最小化该chisqfunc函数。它正在寻找初始条件下的最小值 ,x0这是不正确的。我已经查看了scipy.optimize文档并测试了最小化其他工作正常的功能。您能否建议如何修复下面的代码,或者建议我可以使用另一种方法通过最小化卡方来将线性模型拟合到数据?
import numpy
import scipy.optimize as opt
filename = 'data.csv'
data = numpy.loadtxt(open(filename,"r"),delimiter=",")
stress = data[:,0]
strain = data[:,1]
err_stress = data[:,2]
def chisqfunc((a, b)):
model = a + b*strain
chisq = numpy.sum(((stress - model)/err_stress)**2)
return chisq
x0 = numpy.array([0,0])
result = opt.minimize(chisqfunc, x0)
print result
Run Code Online (Sandbox Code Playgroud)
感谢您阅读我的问题,任何帮助将不胜感激。
干杯,威尔
编辑:我当前使用的数据集:链接到数据
目标是在一定范围的输入值上最小化函数。性能很重要。不幸的是,该ranges::min()算法一遍又一遍地重新计算实时最优的输出。
看起来该算法可以缓存与最佳值相对应的输出值,或者我错过了什么?
在这个例子中,为什么f(x=0)需要调用n次呢?
#include <ranges>
#include <algorithm>
#include <stdio.h>
using namespace std;
int main()
{
auto f=[](int x){
printf("calling f(x=%d)\n", x);
return x*x;
};
auto rg = views::iota(0,4);
int x1 = ranges::min(rg, {}, f);
}
Run Code Online (Sandbox Code Playgroud)
它输出:
调用 f(x=0) 调用 f(x=1) 调用 f(x=0) 调用 f(x=2) 调用 f(x=0) 调用 f(x=3)
有没有ranges::min()更优化的调用方式?
minimization ×10
python ×5
algorithm ×4
scipy ×4
optimization ×2
c# ×1
c++ ×1
c++20 ×1
chi-squared ×1
geometry ×1
iminuit ×1
java ×1
marshalling ×1
min ×1
placement ×1
pyminuit ×1
rectangles ×1
ruby ×1
statistics ×1
std-ranges ×1