我是优化问题的新手,经历过像Alglib,DotNumerics和Microsoft Solver Foundation这样的几个数学库,我对如何启动没有好运,也许一些专家可以解决一些问题。
我希望从参考轮廓上的3d点到目标轮廓获得最佳平移。
以下是约束优化问题。如果我想使用DotNumerics,我如何优化它,我不知道如何启动:
下面是DotNumerics提供的示例,我应该如何将所有的3d点作为输入并生成翻译矢量?
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;
//}
}
编辑1: 为了使事情变得复杂,我已经添加了一直在Unity上工作的真正问题。我从参考模型中采样了5条等高线,并对目标模型(不同的网格和不同的顶点位置)进行了相同的测试 - 在参考模型上的第一个等高线上,我采样了8个归一化点(按距离平均分割),仍然是对目标模型做了同样的事情。因此,我有2对相应的点集(目标模型归一化点位置将始终改变,因为每个用户具有不同的体型) - 接下来,我重复上述步骤以覆盖其余的等值线。一旦我这样做,我将使用上面的公式来优化问题,以获得最佳的平移向量,以便我可以使用 1单个翻译向量将所有顶点从引用转换为目标模型(不确定)这是可能的) - 这是优化的工作原理吗?
请忽略黄色等值线中的红线