Ограничения на BsplinesComp
Я использую BsplinesComp для примера проблемы. Цель состоит в том, чтобы максимально увеличить площадь под линией. Моя проблема возникает, когда я хочу установить ограничение для одного из значений в выходном массиве, который дает bspline. Таким образом, значение, такое, что сплайн проходит, независимо от того, в какой конфигурации он находится. Я пробовал это двумя способами, и я загрузил коды. Они оба очень плохо закодированы, поэтому я думаю, что есть более аккуратный способ сделать это. Ссылки на коды: https://gist.github.com/stackru38/5eae1e86c5802a4df91becdf580d28c5
1- Использование дополнительного явного компонента, в котором среднее значение массива считается выбранным значением
2- Пытался использовать execcomp, но я получаю ошибку. Целевые формы не совпадают. Я смутно помню, как читал такой вопрос, но не смог его найти.
В целом, я пытаюсь установить ограничение для первого, среднего или последнего значения bspline и некоторого диапазона, в котором он должен быть. Подобно графикам здесь
1 ответ
Итак, я думаю, что вы хотите знать лучший способ сделать это, а лучший способ - вообще не использовать никаких дополнительных компонентов. Вы можете напрямую ограничить одну точку в выводе BsplinesComp, используя аргумент "indices" в add_constraint
вызов. Здесь я ограничиваю первую точку сплайна на интервале [-1, 1].
model.add_constraint('interp.h', lower=-1, upper=1, indices=[0])
Запуск модели дает мне форму, которая больше похожа на одну из тех, что вы включили.
Просто для справки, за ошибки, которые вы получили с 1 и 2:
Не уверен, что здесь не так, но, возможно, загруженная вами версия не самая последняя. Вы никогда не использовали AeraComp в ограничениях, поэтому он ничего не делал.
Исключение произошло из-за несоответствия размера при соединении векторного вывода компоновки Bsplines с выражением скалера. Вы можете сделать это, указав "src_indices", указав список индексов в массиве для подключения к цели.
model.connect('interp.h', 'execcomp.x', src_indices=[0])