1

我正在尝试链接 SimEvent 和 MATLAB 的优化模块。为此,我首先需要定义一个运行模拟的函数,然后在优化函数中调用它。我从下面的链接中得到了模拟/优化代码的想法:

http://au.mathworks.com/videos/optimizing-manufacturing-production-processes-68961.html

我试图浏览我在这个视频中看到的所有代码,但是当我应用它时,它不起作用。这是我的代码:


函数最终结果 = SimOpt ()

整数= [1];

A=[];

b=[];

Aeq=[];

beq = [];

磅 = [1];

ub=[10];

最终结果= 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 要求以下输入为双精度数据类型:“f”。

SimOpt 中的错误(第 26 行) finalresults= intlinprog(@f,intcon,A,b,Aeq,beq,lb,ub);


任何帮助将不胜感激。

4

1 回答 1

1

将函数中的最后一行更改为

obj = waiting * 1000.0 + cost

如果乘以整数类型常量值,MATLAB 和许多其他 HLL 会将数据类型转换为整数。所以需要将常数乘以双精度型,加上小数点。

于 2016-01-08T00:22:42.983 回答