我想尽量减少下功能
与限制
在C#。 我试着做 Math.Net's牛顿的方法,但是我不能找出如何做到这一点。 我怎样才能最大限度地减少功能,以编程方式在C#对于给予美元F_1,F_2$?
更新: 后评论的@MinosIllyrien我试过了以下,但我不懂的语法:
_f1 = 0.3; // Global fields.
_f2 = 0.7;
var minimizer = new NewtonMinimizer(1E-4, 100, false);
var objectiveFunction = ObjectiveFunction.ScalarDerivative(FunctionToMinimize, GradientOfFunctionToMinimize);
var firstGuess = CreateVector.DenseOfArray(new[] {0.5});
var minimalWeight1 = minimizer.FindMinimum(objectiveFunction, firstGuess).MinimizingPoint;
private double GradientOfFunctionToMinimize(double w1){
return _f1 - (w1 * _f2) / Math.Sqrt(1 - Math.Pow(w1, 2));
}
private double FunctionToMinimize(double w1){
return w1 * _f1 + Math.Sqrt(1 - Math.Pow(w1, 2)) * _f2;
}
这不起作用,因为FindMinimum方法需要IObjectiveFunction作为功能和不IScalarObjectiveFunction...
更新2: 我尝试解决方案,从 谷歌:
var solver = Solver.CreateSolver("GLOP");
Variable w1 = solver.MakeNumVar(0.0, double.PositiveInfinity, "w1");
Variable w2 = solver.MakeNumVar(0.0, double.PositiveInfinity, "w2");
solver.Add(Math.Sqrt(w1*w1 + w2*w2) == 1);
这将引发的错误*运营商不能用于"可变"和"可变". 某人的任何想法?