约束规划优化



我想用约束编程语言表示和求解下面的方程。

我有变量t,并试图找到最佳乘数k,使我的目标函数最小化。

时间:t1, t2, t3…输入

倍增器k1, k2, k3…(这是需要找到的连续变量)

c1, c2, . .cN是常量

主要方程k1 * sin (c1 * x) + k2 * sin (c2 * x) + k3 * sin (c3 x *) + k4 * cos (c1 * x)……

问题是最小化下面所有方程的结果,使其具有(k1, k2, k3…)的最佳可能值。众所周知,这个问题没有一个确切的解决办法。所以,
当x是t1 -> P1-k1 * sin (c1 * t1) k2 *罪(c2 * t1) k3 * sin (c3 * t1) k4 * cos (c1 * t1)……

当x = t2 -> P2-k1 * sin (c1 * t2) k2 *罪(c2 * t2) k3 * sin (c3 * t2) k4 * cos (c1 * t2)……

当x是t3 -> P3-k1 *罪(c1 * t3) k2 * sin (c2 * t3) k3 * sin (c3 * t3) k4 * cos (c1 * t3)……

P1是时间变量的定界值。但是P(t)不是解析函数,我只是有它们的值,就像t1 = 5 P1=0.7t2= 6 P2= 0.3等

是否有可能在最小化或任何其他CP系统中解决这个问题?

我不认为CP特别适合解决这个问题,因为您在这里没有真正的约束。所有的函数都是你想要最小化的(f1,…, fi),以及几个自由度(k1,…)ki)。

我觉得这个问题很适合用最小二乘法。而不是试图"适合"你的函数f一个给定的值,你试图最小化它们。你能做的就是试着让趋近于0。(所以我们将处理非线性最小二乘)。

下面是用Python编写的内容:

import numpy as np
from scipy.optimize import curve_fit
xdata = np.array([t1, t2, t3, t4, ..., t10])
ydata = np.zeros(10)  # this is your "target". 10 = Number of ti 
def func(x, k1,k2,...ki):
  return (P(x)-k1*sin(c1*x)-k2*sin(c2*x)-k3*sin(c3*x)-k4*cos(c1*x)...)**2  # The square is a trick to minimize the function 
popt, pcov = curve_fit(func, xdata, ydata, k0=(1.0,1.0,...)) # Initial set of ki

最新更新