我正在使用BsplinesComp来解决示例问题。 目标是最大化线下面积。 当我想为bspline给出的输出数组中的一个值设置约束时,我的问题出现了。因此,无论它采用何种配置,样条都会经过该值。 我尝试了两种方式,我上传了代码。它们的编码都很糟糕,所以我认为有一种更简洁的方法。代码链接: https://gist.github.com/stackoverflow38/5eae1e86c5802a4df91becdf580d28c5
1-使用额外显式组件,其中中间数组值被强加为选定值
2-尝试使用execcomp但我收到错误。目标形状不匹配。 我依稀记得读过这样一个问题,却找不到。
总的来说,我试图为bspline的第一个,中间值或最后一个值以及它应该在的某个范围设置约束。 类似于这里的情节
答案 0 :(得分:1)
所以,我认为你想知道最好的方法,最好的方法是不要使用任何额外的组件。您可以使用" indices"直接约束BsplinesComp输出中的单个点。 add_constraint
电话中的参数。在这里,我约束样条曲线中的第一个点位于区间[-1,1]。
model.add_constraint('interp.h', lower=-1, upper=1, indices=[0])
运行模型给我一个看起来更像你所包含的形状的形状。
仅供参考,对于1和2的错误:
不确定这里有什么问题,但您上传的版本可能不是最新版本。你从未在约束中使用过AeraComp,因此它没有做任何事情。
异常是由于将Bsplines comp的矢量输出连接到缩放器表达式时的大小不匹配。您可以通过指定" src_indices"来执行此操作,为其提供阵列中哪些索引连接到目标的列表。 model.connect('interp.h', 'execcomp.x', src_indices=[0])