我有以下最优控制问题
import pyomo.dae as pdae
import pyomo.environ as pe
# Implement 1D bullet train model
m = pe.ConcreteModel()
M = 7150 # Mass
x_0, v_0 = 10000, -80 # Initial conditions (in nondimtime)
x_f, v_f = 0, 0 # Final conditions
nfe = 20 # Number of time steps
m.t_f = pe.Var(domain=pe.PositiveReals) # Final time
m.t = pdae.ContinuousSet(bounds=(0, 1)) # Scaled time
m.x = pe.Var(m.t) # Train position
m.v = pdae.DerivativeVar(m.x, wrt=m.t) # Velocity
m.a = pdae.DerivativeVar(m.v, wrt=m.t) # Acceleration
m.alpha = pe.Var(m.t, bounds=(-1,1)) # Thrust
# Dynamics
@m.Constraint(m.t)
def alpha_ODE(m, t):
return m.alpha[t] == M * m.a[t] / m.t_f**2
m.init = pe.ConstraintList()
# Set initial conditions
m.init.add(m.x[0] == x_0)
m.init.add(m.v[0] == v_0)
# Set final conditions
m.init.add(m.x[1] == x_f)
m.init.add(m.v[1] == v_f)
# Define solver and method
discretizer = pe.TransformationFactory('dae.finite_difference')
discretizer.apply_to(m, wrt=m.t, nfe=nfe, scheme='BACKWARD')
# Specify objective
m.obj = pe.Objective(expr=m.t_f, sense=pe.minimize)
solver = pe.SolverFactory('ipopt')
solution = solver.solve(m)
并且它找到了一个适合这些参数的最佳解决方案。但是,如果我将 M 更改为 715000,它会达到 maxIterations。
当它失败时,我可以绘制它完成的解决方案(尽管它不是最优的),但是 我想知道是否有一种方法可以绘制中间解决方案? 看看求解器可能卡在哪里?
提前致谢。