Optimization 约束规划优化
我想用约束编程语言表达和求解下面的方程 我有变量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..)的最佳可能值最小化下面所有方程的结果。此外,众所周知,这个问题没有一个精确的解决方案。所以Optimization 约束规划优化,optimization,constraint-programming,nonlinear-optimization,minizinc,Optimization,Constraint Programming,Nonlinear Optimization,Minizinc,我想用约束编程语言表达和求解下面的方程 我有变量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)-k
当x为t1-->P1-k1*sin(c1*t1)-k2*sin(c2*t1)-k3*sin(c3*t1)-k4*cos(c1*t1)
当x为t2-->P2-k1*sin(c1*t2)-k2*sin(c2*t2)-k3*sin(c3*t2)-k4*cos(c1*t2)。。。
当x为t3-->P3-k1*sin(c1*t3)-k2*sin(c2*t3)-k3*sin(c3*t3)-k4*cos(c1*t3) P1是时间变量的界值。但P(t)不是解析函数,我只知道它们的值,比如 t1=5 P1=0.7 t2=6 P2=0.3等
在Minizing或任何其他CP系统中有可能解决这个问题吗?我不认为CP特别适合解决这个问题,因为您在这里实际上没有约束条件。你所拥有的只是你想要最小化的函数(f1,…,fi)和一些自由度(k1,…,ki) 我觉得这个问题是一个很好的候选人。与其尝试将函数f“拟合”到给定值,不如尝试最小化它们。因此,您可以尝试将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
我可能误解了,但似乎每次tj表达式
sin(ci*tj)
都是一个常数,称之为Sij
。然后,你的方程看起来像Pj-k1*S1j-k2*S2j-k3*S3j…
。那么问题就是你所说的“最小化所有方程”的确切含义:你可以最小化它们的和,它们的最大值,帕累托最优值,等等。还有一个问题问格汗:当你谈论函数“P(t)”,这是“P1”,“P2”等,所以它应该是“P(1)”,“P(2)”,等等?@hakank是的,P(t)给出P(t1)=P1,P(t2)=P2。。。等等,@jschimpf它们只是线性的,但我这样写是因为有人会利用它的梯度。“最小化它们的和”是目标函数。