Как мне заставить симуляцию / оптимизацию работать в 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 преобразуют тип данных в целое, если умножить на значение константы целого типа. Поэтому необходимо умножить константу на двойной тип, добавив десятичную точку.

Другие вопросы по тегам