首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dymos约束依赖于参数

Dymos约束依赖于参数
EN

Stack Overflow用户
提问于 2021-01-22 20:24:25
回答 1查看 103关注 0票数 1

我想知道是否有可能处理边界约束依赖于可以由优化器更改的参数的问题。我有一个多级火箭的模型,我可以优化轨道和某些参数,例如,某一阶段的推力。但是,假设我还想使实际的舞台质量参数(受约束条件下,它们都是一个常数)。在我的模型中,我有一些边界约束,它依赖于质量--一个相位,表示当推进剂质量燃烧等于推进剂负荷时,一个阶段结束,并且编码为边界约束。因此,实际约束本身将根据优化器如何改变该阶段质量的参数而变化。此外,在各个阶段之间发生的阶段链接,表示火箭级,要求我在表单中添加一个链接约束。

代码语言:javascript
复制
traj.add_linkage_constraint('stage_1', 'stage_2', equals=stage_1_dry_mass)

以表示第一级空质量的丢弃。因此,丢弃质量是预先确定的,不能作为一个参数进行优化。

在戴莫斯有办法处理这件事吗?我想我可以用分数来重新表述这个问题,但是我还没有想清楚,而且我觉得相键仍然是个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-22 21:18:14

,我想知道是否有可能处理边界约束依赖于可以由优化器更改的参数的问题。

绝对一点儿没错。

所以你的车辆质量是:

初始质量=第1阶段支撑质量+第1阶段干质量+第2阶段支撑质量+第2阶段干质量

如果您有跟踪当前车辆质量(m)的状态或ODE输出。在第1阶段下降之前,m_1将包括第1阶段的干质量。立即下降后,总质量m_2将不会。

在这一点上,定义这种关系的方程式是:

代码语言:javascript
复制
m_1 - m_2 = m_stage_1

如前所述,不能将ODE变量指定为边界或链接约束中的边界(它们只是数值),但我们可以将上面的方程写成链接约束。

如果您在ODE中做了一个输出,即“当前总质量减去第1阶段的干质量”(m_minus_stage_1,因为没有更好的名称),那么我们可以使该变量在下降后的下一阶段开始时与当前的总质量连续。

代码语言:javascript
复制
traj.add_linkage_constraint(phase_a='phase1', phase_b='phase2',
                            loc_a='final', loc_b='initial',
                            var_a='m_minus_stage_1', var_b='m',
                            equals=0)

而且,没有什么可以阻止您在这里使用openMDAO约束来链接它们。像这样的东西会管用的。

代码语言:javascript
复制
prob.add_subsystem('mass_linkage', om.ExecComp(m_error = m_1 - m_2 - m_stage_1))
prob.model.connect('traj.phase1.timeseries.states:m', 'mass_linkage.m_1', src_indices=[-1])
prob.model.connect('traj.phase2.timeseries.states:m', 'mass_linkage.m_2', src_indices=[0])
prob.model.promotes('traj', inputs=[('parameters:m_stage_1', 'm_stage_1')])
prob.model.promotes('mass_linkage', inputs=['m_stage_1'])
prob.model.add_constraint('mass_linkage.m_error', equals=0)

注意,在Dymos中,参数被视为输入,而OpenMDAO不允许输入连接到另一个输入。他们必须被提升为同一个名字。我们正在研究Dymos中的“静力学”输出组件,这样我们就可以输出这些参数,这样它们就可以连接起来了。

现在,我完全承认,手工方法,虽然比在代码中计算更有效率,但更令人困惑。这正是dymos打算帮助用户处理的那种复杂性。

而且,可能也有一种方法可以将其作为一组边界约束来处理,但它似乎更自然地被定义为一个链接约束。

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

https://stackoverflow.com/questions/65852289

复制
相关文章

相似问题

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