Применение целых чисел для объявленных входных данных невозможно

Я пытаюсь объявить ввод с целыми числами по умолчанию, но это не представляется возможным. Я делаю ошибку, или в ядре openmdao принудительно применяется плавающий режим.

Вот фрагменты кода, которые я пробовал;

Ожидаемый результат примерно такой: array ([1, 1, 1])

Полученный вывод: [1. 1. 1.]

from openmdao.api import ExplicitComponent,  Problem, IndepVarComp
import numpy as np

class CompAddWithArrayIndices(ExplicitComponent):
    """Component for tests for declaring with array val and array indices."""
    def setup(self):
        self.add_input('x_a', val=np.ones(6,dtype=int))
        self.add_input('x_b', val=[1]*5)
        self.add_output('y')

p = Problem(model=CompAddWithArrayIndices())
p.setup()
p.run_model()

print(p['x_a'])        
print(p['x_b'])   
#%%
from openmdao.api import ExplicitComponent,  Problem, IndepVarComp
import numpy as np

class CompAddWithArrayIndices(ExplicitComponent):
    """Component for tests for declaring with array val and array indices."""
    def setup(self):
        self.add_input('x_a', val=np.zeros(3,dtype=int))
        self.add_output('y')

prob = Problem()
ivc=IndepVarComp()
prob.model.add_subsystem('ivc', ivc,promotes=['*'])
ivc.add_output('x_a', val=np.ones(3,dtype=int))

prob.model.add_subsystem('comp1', CompAddWithArrayIndices(),promotes=['*'])

prob.setup()
prob.run_model()

print(prob['x_a'])
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Переменные, добавленные через add_inputs или add_outputs, будут преобразованы в числа с плавающей запятой или массивы с плавающей запятой. Если вы хотите, чтобы переменная была int или любого другого дискретного типа, вы должны использовать add_discrete_input и add_discrete_output. Такие переменные будут передаваться между системами на основе информации о соединении, но попытки вычислить их производные предприниматься не будут.

Поддержка дискретных переменных была добавлена ​​в OpenMDAO v2.5 в качестве экспериментальной функции (она все еще разрабатывается). Идентификатор фиксации 709401e535cf6933215abd942d4b4d49dbf61b2b в основной ветке, что проблема с продвижением была исправлена. Убедитесь, что вы используете последнюю версию OpenMDAO из этой фиксации или более позднюю

эти переменные также становятся недоступными с уровня проблемы? потому что, если я заменю add_output и add_input на add_discrete_output и add_discrete_input в нижнем примере (во фрагменте кода выше), я получаю ошибку KeyError: «Имя переменной« x_a »не найдено».

ali ali 20.12.2018 15:32

аналогично в другом моем коде, когда я делаю переход с непрерывного на дискретный ввод / вывод для 1 массива ввода / вывода, я получаю сообщение об ошибке TypeError: compute () принимает 3 позиционных аргумента, но было дано 5 Я не делаю никаких других изменений кода

ali ali 20.12.2018 15:37

Может быть, вы используете класс, в котором метод вычислений был реализован со старой подписью (compute(inputs, outputs)), а не новый с дискретными входами и выходами?

onodip 20.12.2018 17:19

Если компонент содержит дискретные входы или выходы, вызывается более длинная форма вычисления с двумя дополнительными аргументами (дискретные_входы и дискретные_выводы).

Bret Naylor 20.12.2018 17:54

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