No such file or directory error with FMU block
20 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
I created FMU file with the below code by Python then loaded the file with FMU block but I got
Error with specified FMU: Cannot load dynamic library
'/MATLAB Drive/slprj/_fmu/b37a07ca0ba765ad86fa700f844987e2/MachineLearningFMU/binaries/x86_64-linux/ Cannot load MachineLearningFMU.so'
: libpython3.12.so.1.0: cannot open shared object file: No such file or directory
error when I did simulation.
Why do I get this error?
The python code is to load regression_model.pkl file that is a simple machine learning model to predict 2 outputs based on 7 inputs and them save it as .fmu file.
7 inputs (Features):
'accel'
'brake'
'hvac'
'dcdc'
'motor'
'soc'
'vl'
2 outputs (Objective Variables):
'torque'
're_brake'
And I execute this command and create FMU file.
pythonfmu3 build -f mlmodelfmu.py
I wonder if I'm missing something in my python code.
I'd appreciate it you could give me your advice.
Here is my python script (mlmodelfmu.py) to create FMU file.
from pythonfmu3 import Fmi3Causality, Fmi3Slave, Float64
import joblib
import numpy as np
class MachineLearningFMU(Fmi3Slave):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.author = "AI Assistant"
self.description = "FMU for regression prediction using pkl model"
self.model = joblib.load("regression_model.pkl")
self.inputs = [0.0] * 7
self.outputs = [0.0] * 2
input_names = ["accel", "brake", "hvac", "dcdc", "motor", "soc", "vl"]
for i, name in enumerate(input_names):
self.register_variable(
Float64(
name,
causality=Fmi3Causality.input,
getter=lambda i=i: self.inputs[i],
setter=lambda v, i=i: self.set_input(i, v),
)
)
output_names = ["torque", "re_brake"]
for i, name in enumerate(output_names):
self.register_variable(
Float64(
name,
causality=Fmi3Causality.output,
getter=lambda i=i: self.outputs[i],
)
)
def set_input(self, index, value):
self.inputs[index] = value
def predict_with_model(self):
input_array = np.array([self.inputs])
prediction = self.model.predict(input_array)
for i in range(len(self.outputs)):
self.outputs[i] = prediction[0][i]
def do_step(self, current_time, step_size):
self.predict_with_model()
return True
Also,this is how I created .pkl file. in the environment of Python 3.10 on local.
n_samples = 1000
X = np.random.rand(n_samples, 7)
y = np.random.rand(n_samples, 2)
input_names = ['accel', 'brake', 'hvac', 'dcdc',
'motor', 'soc', 'vl']
output_names = ['torque', 're_brake']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
rf = RandomForestRegressor(n_estimators=100, random_state=42)
model = MultiOutputRegressor(rf)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
joblib.dump(model, 'regression_model.pkl')
0 Commenti
Risposta accettata
Venkat Siddarth Reddy
il 12 Ott 2024
Modificato: Venkat Siddarth Reddy
il 12 Ott 2024
Hi 翼,
This issue seems to be due to the requirement of Python version "3.12" to execute the FMU. If this version of Python is already installed, I highly recommend reinstalling it and setting up the configuration again.
Additionally,once the Python setup is completed, please generate a new PKL file in "Python 3.12" version.
However if the issue persists even after the above steps, please check the compliance of the FMU with the FMI standard using the "FMU compliance checker". This should reveal more information about the issue.
For more information on "FMU compliance checker", please refer to the following repository:
Additionally, please refer to the following MATLAB Answers Community post on how to troubleshoot "FMU Import Issues" in Simulink:
I hope it helps!
2 Commenti
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Wireless Communication in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!