Ограничения на 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:

  1. Не уверен, что здесь не так, но, возможно, загруженная вами версия не самая последняя. Вы никогда не использовали AeraComp в ограничениях, поэтому он ничего не делал.

  2. Исключение произошло из-за несоответствия размера при соединении векторного вывода компоновки Bsplines с выражением скалера. Вы можете сделать это, указав "src_indices", указав список индексов в массиве для подключения к цели. model.connect('interp.h', 'execcomp.x', src_indices=[0])

Другие вопросы по тегам