Ядро Python аварийно завершает работу при решении модели Pyomo, созданной с помощью OMLT, с использованием Cyipopt.Python

Программы на Python
Anonymous
Ядро Python аварийно завершает работу при решении модели Pyomo, созданной с помощью OMLT, с использованием Cyipopt.

Сообщение Anonymous »

Я пытаюсь решить задачу оптимизации, ограничением которой является нейронная сеть. Я создаю это ограничение в Pyomo, используя пакет OMLT. В качестве оптимизатора я использую Cyipopt. Я провожу сравнительное исследование с использованием платформы серого ящика Pynumero, которая совместима только с Cyipopt, поэтому я должен использовать Cyipopt, чтобы обеспечить согласованность оптимизатора. Он начинает работать как положено, но в какой-то момент ядро ​​случайно выходит из строя. Кто-нибудь знает, как обойти эту проблему?
Я думаю, что с пакетами должна быть какая-то проблема несовместимости. Большую часть из них я установил из conda, некоторые доступны только из pip. Я пробовал разные версии и менял источник, но, похоже, это не помогло. Ниже приведен игрушечный пример возникновения этой проблемы.
import torch
import numpy as np

import tempfile

from omlt.io import write_onnx_model_with_bounds,load_onnx_neural_network
from omlt import OmltBlock, OffsetScaling
from omlt.neuralnet import FullSpaceNNFormulation
import onnx

import pyomo.environ as pyo

import matplotlib.pyplot as plt

class neuralnetwork(torch.nn.Module):
def __init__(self):
super().__init__()

self.activ = torch.nn.Sigmoid()

self.Dense1 = torch.nn.Linear(2,5)

self.Dense2 = torch.nn.Linear(5,1)

def forward(self, x):

x = self.Dense1(x)

x = self.activ(x)

x= self.Dense2(x)

return x

def PyomoModel(NN):

x = torch.randn(1,2)

with tempfile.NamedTemporaryFile(suffix='.onnx', delete=False) as f:
torch.onnx.export(
NN,
x,
f,
input_names=['input'],
output_names=['output'],
dynamic_axes={
'input': {0: 'batch_size'},
'output': {0: 'batch_size'}
}
)

input_bounds = [(-1,1) for _ in range(2)]

scaler = OffsetScaling(
offset_inputs=np.zeros(2),
factor_inputs=np.ones(2),
offset_outputs=np.zeros(1),
factor_outputs=np.ones(1)
)

write_onnx_model_with_bounds(f.name, None, input_bounds)

onnx_model = onnx.load(f.name)
print(f"Wrote PyTorch model to {f.name}")

network_definition = load_onnx_neural_network(onnx_model, scaling_object=scaler)

formulation = FullSpaceNNFormulation(network_definition)

mdl = pyo.ConcreteModel()

mdl.nn = OmltBlock()

mdl.nn.build_formulation(formulation)

mdl.cons1 = pyo.Constraint(expr=-1

Подробнее здесь: https://stackoverflow.com/questions/789 ... ng-cyipopt

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