Как мне заставить симуляцию / оптимизацию работать в Matlab?
Я пытаюсь связать SimEvent и модуль оптимизации MATLAB. Для этого мне сначала нужно определить функцию, которая запускает симуляцию, а затем вызвать ее в функции оптимизации. Я получил представление о коде симуляции / оптимизации по ссылке ниже:
http://au.mathworks.com/videos/optimizing-manufacturing-production-processes-68961.html
Я попытался просмотреть весь код, который я вижу в этом видео, но когда я его применяю, он не работает. Вот мой код:
функция finalresults = SimOpt ()
intcon = [1];
А =[];
б =[];
Aeq =[];
beq =[];
фунт = [1];
ub = [10];
finalresults = intlinprog(@ f, intcon, A, b, Aeq, beq, lb, ub);
function obj = f(vecX)
NumServers = vecX(1);
NumTruck = vecX(2);
set_param('concreting10/Positioning and Unloading','NumberOfServers',num2str(NumServers));
set_param('concreting10/Washing','NumberOfServers',num2str(NumTruck));
simOut = sim('concreting10','SaveOutput','on','OutputSaveName','WaitingTimeInQueue');
z = simOut.get('WaitingTimeInQueue');
waiting = max(z);
cost = [100 200]*vecX';
obj = waiting*1000+cost;
end
конец
Когда я запускаю весь код, я получаю это предупреждение:
Ошибка при использовании intlinprog(строка 122) INTLINPROG требует, чтобы следующие входные данные имели тип данных double: 'f'.
Ошибка в SimOpt (строка 26) finalresults= intlinprog(@f,intcon,A,b,Aeq,beq,lb,ub);
Любая помощь будет оценена.
1 ответ
Измените последнюю строку в функции на
obj = waiting * 1000.0 + cost
MATLAB и многие другие HLL преобразуют тип данных в целое, если умножить на значение константы целого типа. Поэтому необходимо умножить константу на двойной тип, добавив десятичную точку.