C# 约束优化-在Unity3d中查找最佳平移向量 我是一个新的优化问题,经过了Alglib、dotNoCICS和微软Sover基金会等几个数学库,我运气不佳,不知道如何开始,也许有些专家可以省略一些。

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

我想得到从参考轮廓上的3d点到目标轮廓的最佳转换

下面是约束优化问题。如何优化它如果我想使用DotNumerics,例如,我不知道如何启动:

  • 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;
        //}
    }