Как ограничить арифметику с плавающей запятой в Pulse или pyomo специально для использования float32Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как ограничить арифметику с плавающей запятой в Pulse или pyomo специально для использования float32

Сообщение 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 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»