Мне нужно, чтобы Pulse или pyomo выполняли ВСЕ арифметические операции исключительно с использованием float32.
Похоже, что по умолчанию они используют float64.
Следующие — 2 примеры из мякоти и пиомо для операции суммирования.
import pulp
import pyomo.environ as pyo
import numpy as np
def pulp_example(values, target_float):
variables = pulp.LpVariable.dicts("x", range(len(values)), 0, 1, pulp.LpBinary)
problem = pulp.LpProblem("Problem", pulp.LpMinimize)
problem += 0
problem += pulp.lpSum([variables for i in range(len(values))]) == 2
sum_exp = pulp.lpSum([variables * float(values) for i in range(len(values))])
problem += sum_exp == target_float
status = problem.solve()
return status
def pyomo_example(values, target_float):
model = pyo.ConcreteModel()
model.I = pyo.RangeSet(0, len(values) - 1)
model.x = pyo.Var(model.I, within=pyo.Binary)
model.selection_constraint = pyo.Constraint(expr=sum(model.x for i in model.I) == 2)
def sum_expr_rule(model):
return sum(model.x * values for i in model.I)
model.eq_expr = pyo.Expression(rule=sum_expr_rule)
model.constraint = pyo.Constraint(expr=model.eq_expr == target_float)
model.objective = pyo.Objective(expr=0, sense=pyo.minimize)
solver = pyo.SolverFactory('cbc')
result = solver.solve(model, tee=False)
return result.solver.status
input_values = [90.2743351459503174, 4.8144315292034]
# As expected, summation of same input values results in different outputs depending on float data type
float32_target = 95.0887680053711 # float32 arithmetic
float64_target = 95.08876667515372 # float64 arithmetic
assert np.sum([input_values], dtype=np.float32) == float32_target
assert np.sum([input_values], dtype=np.float64) == float64_target
pulp_res = pulp_example(input_values, float32_target) # 'Infeasible
pyomo_res = pyomo_example(input_values, float32_target) # 'warning'
pulp_res = pulp_example(input_values, float64_target) # 'Optimal'
pyomo_res = pyomo_example(input_values, float64_target) # 'ok'
Подробнее здесь: https://stackoverflow.com/questions/793 ... se-float32
Как ограничить арифметику с плавающей запятой в Pulse или pyomo специально для использования float32 ⇐ Python
Программы на Python
1736011556
Anonymous
Мне нужно, чтобы Pulse или pyomo выполняли ВСЕ арифметические операции исключительно с использованием float32.
Похоже, что по умолчанию они используют float64.
Следующие — 2 примеры из мякоти и пиомо для операции суммирования.
import pulp
import pyomo.environ as pyo
import numpy as np
def pulp_example(values, target_float):
variables = pulp.LpVariable.dicts("x", range(len(values)), 0, 1, pulp.LpBinary)
problem = pulp.LpProblem("Problem", pulp.LpMinimize)
problem += 0
problem += pulp.lpSum([variables[i] for i in range(len(values))]) == 2
sum_exp = pulp.lpSum([variables[i] * float(values[i]) for i in range(len(values))])
problem += sum_exp == target_float
status = problem.solve()
return status
def pyomo_example(values, target_float):
model = pyo.ConcreteModel()
model.I = pyo.RangeSet(0, len(values) - 1)
model.x = pyo.Var(model.I, within=pyo.Binary)
model.selection_constraint = pyo.Constraint(expr=sum(model.x[i] for i in model.I) == 2)
def sum_expr_rule(model):
return sum(model.x[i] * values[i] for i in model.I)
model.eq_expr = pyo.Expression(rule=sum_expr_rule)
model.constraint = pyo.Constraint(expr=model.eq_expr == target_float)
model.objective = pyo.Objective(expr=0, sense=pyo.minimize)
solver = pyo.SolverFactory('cbc')
result = solver.solve(model, tee=False)
return result.solver.status
input_values = [90.2743351459503174, 4.8144315292034]
# As expected, summation of same input values results in different outputs depending on float data type
float32_target = 95.0887680053711 # float32 arithmetic
float64_target = 95.08876667515372 # float64 arithmetic
assert np.sum([input_values], dtype=np.float32) == float32_target
assert np.sum([input_values], dtype=np.float64) == float64_target
pulp_res = pulp_example(input_values, float32_target) # 'Infeasible
pyomo_res = pyomo_example(input_values, float32_target) # 'warning'
pulp_res = pulp_example(input_values, float64_target) # 'Optimal'
pyomo_res = pyomo_example(input_values, float64_target) # 'ok'
Подробнее здесь: [url]https://stackoverflow.com/questions/79322253/how-to-restrict-float-arithmetics-in-pulp-or-pyomo-to-specifically-use-float32[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия