求大神 有关C#与matlab混合编程中MWArray 的问题
最近小弟在做一个小小的软件,自己基础不好,遇到一个问题还请大家多帮忙。 C#与matlab混合编程中MWArray 是怎么样传递函数的 !我在VS2008中调用的matlab编译生成的dll文件,(前面的步骤就不详细说了) ,但不会使用MWArray,我的代码是这样的
value_1 = (double)NIND;
value_2 = (double)MAXGEN;
value_3 = (double)GGAP;
value_4 = (double)XOVR;
value_5 = (double)MUTR;
test.demo output = new test.demo();
MWArray A = value_1;
MWArray B = value_2;
MWArray C = value_3;
MWArray D = value_4;
MWArray E = value_5;
MWArray[] x = output.JSP(5, A, B, C, D, E);//"5"为输入的个数
剩下的代码就不会写了,,我现在的问题是 怎么样能是将参数传递给matlab 使之运算出结果,下面是我的matlab中使用的函数:(里面用到的函数都调用了)
function [MinVal,P] = JSP(T,Jm,NIND,MAXGEN,GGAP,XOVR,MUTR)
% 比如 MinVal = JSP(T,Jm,40,50,0.9,0.8,0.6)
T=[29 78 9 36 49 11 62 56 44 21;
43 90 75 11 69 28 46 46 72 30;
91 85 39 74 90 10 12 89 45 33;
81 95 71 99 9 52 85 98 22 43;
14 6 22 61 26 69 21 49 72 53;
84 2 52 95 48 72 47 65 6 25;
46 37 61 13 32 21 32 89 30 55;
31 86 46 74 32 88 19 48 36 79;
76 69 76 51 85 11 40 89 26 74;
85 13 61 7 64 76 47 52 90 45];
Jm=[0 1 2 3 4 5 6 7 8 9;
0 2 4 9 3 1 6 5 7 8;
1 0 3 2 8 5 7 6 9 4;
1 2 0 4 6 8 7 3 9 5;
2 0 1 5 3 4 8 7 9 6;
2 1 5 3 8 9 0 6 4 7;
1 0 3 2 6 5 9 8 7 4;
2 0 1 5 4 6 8 9 7 3;
0 1 3 5 2 9 6 7 4 8;
1 0 2 6 8 9 5 3 4 7];
%变化
Jm=Jm+1;
[PNumber,MNumber]=size(T); %PNumber 工件数量 %MNumber单个工件工序的数量
gen=0; %代计数器
trace=zeros(2, MAXGEN); %寻优结果的初始值
WNumber=PNumber*MNumber; %工序总数量
Chrom=zeros(NIND,WNumber); % 初始化群
%基于调度优先级的编码方法:每个基因对应一道工序,代表该工序在进行调度操作时的处理优先级。
%例如一个3!3问题,则染色体用1-3的整数表示为: [1 3 2 1 1 3 3 2 2]
%基因与工序的对应关系如下:
% P11 P31 P21 P12 P13 P32 P33 P22 P23
% [1 3 2 1 1 3 3 2 2 ]
%其中Pij表示第i个零件的第j道工序
Number=zeros(1,PNumber);
for i=1:PNumber
Number(i)=MNumber;
end
for j=1:NIND
WPNumberTemp=Number;
for i=1:WNumber
val=unidrnd(PNumber);
while WPNumberTemp(val)==0
val=unidrnd(PNumber);
end
Chrom(j,i)= val;
WPNumberTemp(val)=WPNumberTemp(val)-1;
end
end
%计算目标函数值
[PVal ObjV P]=cal(Chrom,T,Jm);
while gen<MAXGEN
FitnV=ranking(ObjV); %分配适应度值(Assign fitness values)
SelCh=select('sus', Chrom, FitnV, GGAP); %选择
SelCh=across(SelCh,XOVR,PNumber); %交叉
SelCh=aberrance(SelCh,MUTR); %变异
[PVal ObjVSel P]=cal(SelCh,T,Jm); %计算目标函数值
[Chrom ObjV] =reins(Chrom, SelCh,1, 1, ObjV, ObjVSel); %重插入子代的新种群
gen=gen+1; %代计数器增加
%输出最优解及其序号,并在目标函数图像中标出,Y为最优解,I为种群的序号
trace(1, gen)=min(ObjV); %遗传算法性能跟踪
trace(2, gen)=mean(ObjV);
% 初始化
if gen==1
Val1=PVal;
Val2=P;
MinVal=min(ObjV);%最小时间
end
%记录 最小的工序
if MinVal> trace(1,gen)
Val1=PVal;
Val2=P;
MinVal=trace(1,gen);
end
end
PVal=Val1; %工序时间
P=Val2; %工序
%计算解的变化
hold on;
plot([0,0],[0,0]);
plot(trace(1,:));
hold on;
plot(trace(2,:),'-.');grid;
legend('解的变化','种群均值的变化');
xlabel('\fontsize{25}迭代次数');
ylabel('\fontsize{23}生产周期');
%显示结果
figure(2);
for i=1:WNumber
val= P(1,i);
a=(mod(val,10))+1;
b=((val-a+1)/10);
mText=Jm(b,a);
PlotRec(PVal(1,i),PVal(2,i),mText);
hold on;
mPoint1=PVal(1,i);
mPoint2=PVal(2,i);
x1=mPoint1;
y1=mText-0.5;
x2=mPoint2;
y2=mText-0.5;
x3=mPoint2;
y3=mText;
x4=mPoint1;
y4=mText;
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1-1/b,1/b,b/PNumber]);
word=num2str(P(1,i));
%text(0.5*mPoint1+0.5*mPoint2,mText-0.5,word);
text(mPoint1,mText-0.7,word);
xlabel('\fontsize{27}时间历程');
ylabel('\fontsize{21}机床编号');
end
saveas(gcf,'D:/Visual Studio 2008/1/matlabshiyan/matlabshiyan/bin/Debug/test1.jpg');
这个解决是车间级调度的代码,小弟马上就要交作业了,真心求大神帮忙! C# MATLAB
补充:.NET技术 , ASP.NET