Linear programming for simulink code generation

9 vues (au cours des 30 derniers jours)
zihui lang
zihui lang le 27 Juil 2021
Commenté : zihui lang le 24 Août 2021
I'm trying to do TSP problem in simulink and use it to generate a ROS package. However, when I calculating minimum weight perfect matching, I use linear programming to find the best prefect match, but linprog function is not supported for code generation. I tried with a few other ways such as OPTI tool box and fminsearchcon but none of them works, the first one also not supporting code generation and the second one can't give me a proper result when there is more than 16 nodes and cost too much time. (BTW all the block in my simulink models are matlab function blocks)
So how should I fix the problem? I can't use linprog as an external function since I have to pack it into a ROS package so everything in my model should be able to generate code.
I'm thinking about using C++ to add another block solving the minimum weight perfect matching and transfer the data back to matlab function blocks. Will that works? Is there any better option that I could do? Or is there any tutorial vedio for similar problem that I can go through?
Thanks.
  2 commentaires
johnnynoc4sh
johnnynoc4sh le 24 Août 2021
I´m also confronted with solving an optimization problem in Simulink RT and I had the same experience as you @zihui lang: No information on the WWW about this topic at all. Very disapointing, I guess it is because the needed optimization time during runtime can vary and since can not be estimated by time of compilation. This kills all hard realtime conditions. I will try to implement C++ version of OR Tools by Google. If I suceed, I will report.
Have you done any approaches so far? I wish you good luck, stay in touch.
zihui lang
zihui lang le 24 Août 2021
@Jonathan Ries Thanks, for your reply, I do make some progress but it is in a different way. I first try to play with matlab S-function, which means I replaced my minimum weight perfect matching block into a C++ code. There are some tutorial about S-function on youtube but those are all some very easy examples without calling in between source file. And the weird things happens, I try to include all header and source file in the S-function but it won't work, I also tried assemble all the source file and header into a single .cpp and .h but it still not working. However, if I copy the c_wapper file generated by Matlab into my Visual studio, the main function is working properly. Since I got a poor background in C++, I decide to give up building a S-function.
I believe this is due to some of the output or input signal for this S-function block have variable size. If you also got variable size situation, I'll suggest you not try with S-function.
As for my problem, I just give up the christofied method and using genetic method to solve the TSP. That method is very straight forward and doesn't ask for complex matlab function.
In your case, I might suggest you looking at OPTI toolbox, I don't remeber the detail but that tool box should have .mex or .cpp file that you could use to build your S-function.

Connectez-vous pour commenter.

Réponses (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by