当前位置:编程学习 > C#/ASP.NET >>

求大神 有关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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,