首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新制定AMPL汽车示例

重新制定AMPL汽车示例
EN

Stack Overflow用户
提问于 2016-10-10 20:08:56
回答 1查看 144关注 0票数 0

例如,我正在尝试迁移Ipopt源代码tarball中出现的ampl car问题。我在结束条件(在最后一次迭代中以零速度到达一个地方)和代价函数(最小化最终时间)方面遇到了问题。

有人能帮我修改一下下面的模型吗?

代码语言:javascript
复制
# min tf
# dx/dt = 0
# dv/dt = a - R*v^2
# x(0) = 0; x(tf) = 100
# v(0) = 0; v(tf) = 0
# -3 <= a <= 1 (a is the control variable)

#!Python3.5
from pyomo.environ import *
from pyomo.dae import *

N = 20;
T = 10;
L = 100;

m = ConcreteModel()

# Parameters
m.R = Param(initialize=0.001)

# Variables
def x_init(m, i):
    return i*L/N

m.t = ContinuousSet(bounds=(0,1000))
m.x = Var(m.t, bounds=(0,None), initialize=x_init)
m.v = Var(m.t, bounds=(0,None), initialize=L/T)
m.a = Var(m.t, bounds=(-3.0,1.0), initialize=0)

# Derivatives
m.dxdt = DerivativeVar(m.x, wrt=m.t)
m.dvdt = DerivativeVar(m.v, wrt=m.t)

# Objetives
m.obj = Objective(expr=m.t[N])

# DAE
def _ode1(m, i):
    if i==0:
        return Constraint.Skip
    return m.dxdt[i] == m.v[i]
m.ode1 = Constraint(m.t, rule=_ode1)

def _ode2(m, i):
    if i==0:
        return Constraint.Skip
    return m.dvdt[i] == m.a[i] - m.R*m.v[i]**2
m.ode2 = Constraint(m.t, rule=_ode2)

# Constraints
def _init(m):
    yield m.x[0] == 0
    yield m.v[0] == 0
    yield ConstraintList.End
m.init = ConstraintList(rule=_init)

'''
def _end(m, i):
    if i==N:
        return m.x[i] == L amd m.v[i] == 0
    return Constraint.Skip
m.end = ConstraintList(rule=_end)
'''

# Discretize
discretizer = TransformationFactory('dae.finite_difference')
discretizer.apply_to(m, nfe=N, wrt=m.t, scheme='BACKWARD')

# Solve
solver = SolverFactory('ipopt', executable='C:\\EXTERNOS\\COIN-OR\\win32-msvc12\\bin\\ipopt')
results = solver.solve(m, tee=True)
EN

回答 1

Stack Overflow用户

发布于 2016-10-10 23:32:14

目前,Pyomo中的ContinuousSet必须是有界的。这意味着,为了使用该工具解决最小时间最优控制问题,必须重新制定问题的公式,以从ContinuousSet中删除时间缩放。此外,您还必须引入一个额外的变量来表示最终时间。我在Pyomo github repository中添加了一个示例,展示如何针对您的问题执行此操作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39957970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档