Optimization ILNumerics:优化函数时返回意外的最小值
我正在运行ILNumerics(发布时的最新版本)的试用版,但在运行Optimization ILNumerics:优化函数时返回意外的最小值,optimization,ilnumerics,Optimization,Ilnumerics,我正在运行ILNumerics(发布时的最新版本)的试用版,但在运行Optimization.fmin优化器时得到了错误的最小值 最小值应为f(-5.218)=-3.342,搜索范围为-10目标函数在负位置返回NaN。您可以很容易地检查这一点: 首先,在目标范围(-10…10)上添加样本值,并计算目标函数的结果 Array<double> bounds = new double[] { -10.0, 10.0 }; Array<double> start = new do
Optimization.fmin
优化器时得到了错误的最小值
最小值应为f(-5.218)=-3.342,搜索范围为-10目标函数在负位置返回NaN。您可以很容易地检查这一点: 首先,在目标范围(-10…10)上添加样本值,并计算目标函数的结果
Array<double> bounds = new double[] { -10.0, 10.0 };
Array<double> start = new double[] { 1 };
Array<double> y = Optimization.fmin(myfunc, start, lowerBound: bounds[0], upperBound: bounds[1]);
Array<double> range = linspace(-10.0, 10, 100);
Array<double> YinRange = apply(range, range, (a,b) => (double)myfunc(a));
Console.WriteLine("The minimum is found at");
Console.WriteLine("{0}", y);
Console.WriteLine("The value is");
Console.WriteLine("{0}", myfunc(y));
Array bounds=newdouble[]{-10.0,10.0};
数组开始=新的双精度[]{1};
数组y=Optimization.fmin(myfunc,start,lowerBound:bounds[0],upperBound:bounds[1]);
数组范围=linspace(-10.0,10100);
数组YinRange=apply(范围,范围,(a,b)=>(双精度)myfunc(a));
Console.WriteLine(“最小值位于”);
Console.WriteLine(“{0}”,y);
Console.WriteLine(“值为”);
Console.WriteLine(“{0}”,myfunc(y));
现在,可以使用ArrayVisualizer在调试会话期间可视化实际值:
fmin
返回了大致0
,这似乎是合理的,因为它试图忽略NaN值。根据这个图,0
实际上是最小值和最小值
另请参见:您的价值是多少?对不起,您是对的。我使用了错误的目标函数。
Array<double> bounds = new double[] { -10.0, 10.0 };
Array<double> start = new double[] { 1 };
Array<double> y = Optimization.fmin(myfunc, start, lowerBound: bounds[0], upperBound: bounds[1]);
Array<double> range = linspace(-10.0, 10, 100);
Array<double> YinRange = apply(range, range, (a,b) => (double)myfunc(a));
Console.WriteLine("The minimum is found at");
Console.WriteLine("{0}", y);
Console.WriteLine("The value is");
Console.WriteLine("{0}", myfunc(y));