C# 约束优化-在Unity3d中查找最佳平移向量 我是一个新的优化问题,经过了Alglib、dotNoCICS和微软Sover基金会等几个数学库,我运气不佳,不知道如何开始,也许有些专家可以省略一些。
我想得到从参考轮廓上的3d点到目标轮廓的最佳转换 下面是约束优化问题。如何优化它如果我想使用DotNumerics,例如,我不知道如何启动:C# 约束优化-在Unity3d中查找最佳平移向量 我是一个新的优化问题,经过了Alglib、dotNoCICS和微软Sover基金会等几个数学库,我运气不佳,不知道如何开始,也许有些专家可以省略一些。,c#,unity3d,mathematical-optimization,C#,Unity3d,Mathematical Optimization,我想得到从参考轮廓上的3d点到目标轮廓的最佳转换 下面是约束优化问题。如何优化它如果我想使用DotNumerics,例如,我不知道如何启动: Pr:参考轮廓上的三维点 Pt:目标轮廓上的3d点 t(Pr):点Pr的平移向量附加标记对象,游戏引擎的整个点是它为您执行这些变换。附加标记对象,游戏引擎的整个点是它为您执行这些变换。 public void OptimizationLBFGSBConstrained() { //This example minimize the funct
- Pr:参考轮廓上的三维点
- Pt:目标轮廓上的3d点
- t(Pr):点Pr的平移向量附加标记对象,游戏引擎的整个点是它为您执行这些变换。附加标记对象,游戏引擎的整个点是它为您执行这些变换。
public void OptimizationLBFGSBConstrained() { //This example minimize the function //f(x0,x2,...,xn)= (x0-0)^2+(x1-1)^2+...(xn-n)^2 //The minimum is at (0,1,2,3...,n) for the unconstrained case. //using DotNumerics.Optimization; L_BFGS_B LBFGSB = new L_BFGS_B(); int numVariables = 5; OptBoundVariable[] variables = new OptBoundVariable[numVariables]; //Constrained Minimization on the interval (-10,10), initial Guess=-2; for (int i = 0; i < numVariables; i++) variables[i] = new OptBoundVariable("x" + i.ToString(), -2, -10, 10); double[] minimum = LBFGSB.ComputeMin(ObjetiveFunction, Gradient,variables); ObjectDumper.Write("L-BFGS-B Method. Constrained Minimization on the interval (-10,10)"); for (int i = 0; i < minimum.Length; i++) ObjectDumper.Write("x" + i.ToString() + " = " + minimum[i].ToString()); //Constrained Minimization on the interval (-10,3), initial Guess=-2; for (int i = 0; i < numVariables; i++) variables[i].UpperBound = 3; minimum = LBFGSB.ComputeMin(ObjetiveFunction, Gradient, variables); ObjectDumper.Write("L-BFGS-B Method. Constrained Minimization on the interval (-10,3)"); for (int i = 0; i < minimum.Length; i++) ObjectDumper.Write("x" + i.ToString() + " = " + minimum[i].ToString()); //f(x0,x2,...,xn)= (x0-0)^2+(x1-1)^2+...(xn-n)^2 //private double ObjetiveFunction(double[] x) //{ // int numVariables = 5; // double f = 0; // for (int i = 0; i < numVariables; i++) f += Math.Pow(x[i] - i, 2); // return f; //} //private double[] Gradient(double[] x) //{ // int numVariables = 5; // double[] grad = new double[x.Length]; // for (int i = 0; i < numVariables; i++) grad[i] = 2 * (x[i] - i); // return grad; //} }