我如何在Matlab中进行模拟/优化



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

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

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


函数最终结果=SimOpt()

intcon=[1];

A=[];

b=[];

Aeq=[];

beq=[];

lb=[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要求以下输入的数据类型为double:"f"。

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


任何帮助都将不胜感激。

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

obj = waiting * 1000.0 + cost

如果将数据类型乘以整数类型常数值,MATLAB和许多其他HLL将数据类型转换为整数。因此,有必要将常数作为双精度类型乘以一个小数点。

相关内容

  • 没有找到相关文章

最新更新