Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
 
 
主题工具 显示模式
旧 2009-03-24, 19:37   #1
blueye
初级会员
 
注册日期: 2009-02-26
年龄: 43
帖子: 6
声望力: 0
blueye 正向着好的方向发展
默认 [求助]Visual c++6.0调用matlab6.5出现的问题!

Visual c++6.0调用matlab6.5出现的问题!

(1)设置:
要在VC中成功编译Matlab引擎程序,必须包含引擎头文件engine.h并引入Matlab对应的库文件libmx.lib、libmat.lib、libeng.lib。具体的说,打开一个工程后,做如下设置(以VC6为例):
  1) 通过菜单工程/选项,打开设置属性页,进入Directories页面,在目录下拉列表框中选择Include files,添加路径:"C:\matlab\extern\include"(假定matlab安装在C:\matlab目录)。
  2) 选择Library files,添加路径:C:\matlab\extern\lib\win32\microsoft\msvc60。
  3) 通过菜单工程/设置,打开工程设置属性页,进入Link页面,在Object/library modules编辑框中,添加文件名libmx.lib libmat.lib libeng.lib。
以上步骤1)、2)只需设置一次,而步骤3)对每个工程都要单独设定。



(2)程序代码:
该程序采用Visual c++6.0调用matlab6.5来求取多目标优化问题的解,优化问题的目标函数加权后变成单目标优化问题,采用内点罚函数法把非线性约束加入到目标函数中使非线性约束问题变成仅带线性边界约束的单目标优化问题,最后用遗传算法工具箱来解这个单目标问题。首先给matlab加入遗传算法工具箱GA(该工具箱GA在雷英杰老师的书:《matlab遗传算法工具箱及其应用》有详细讲解,这里不介绍)。


先对文件的结构做一个介绍然后贴出代码:Visual c++程序包含三个文件,Model_solver.cpp、Model_solver.h和VC_MATLAB.cpp。其中Model_solver.cpp、Model_solver.h构成一个类Model_solver,而VC_MATLAB.cpp是程序运行主程序。matlab程序包含两个,其中gen_opt.m是执行遗传算法的程序,visual c++调用的就是这个文件.而objfun.m是求目标函数值的程序。

下面是代码:



文件1:Model_solver.cpp
//class Model_solver
// Model_solver.cpp: implementation of the Model_solver class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "VC_MATLAB.h"
#include "Model_solver.h"
#include "engine.h"

#include <iostream>
#include <fstream>
#include <sstream>
#include <cmath>
#include <string>
using namespace std;

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Model_solver::Model_solver()
{}

Model_solver::~Model_solver()
{}


void Model_solver::initial(int dim_var1,int dim_center1,int dim_obj1,int dim_nlcon1,double C_obj1[],double C_nlcon1[],double Bound_up0[],double Bound_down0[],double Xcenter[],double Weight1[])
{
dim_var=dim_var1;
dim_center=dim_center1;
dim_obj=dim_obj1;
dim_nlcon=dim_nlcon1;

int i;
for(i=0;i<dim_var;i=i+1)
{
Bound_up1[i]=Bound_up0[i];
Bound_down1[i]=Bound_down0[i];
}

for(i=0;i<dim_center*dim_obj;i=i+1)
{
C_obj[i]=C_obj1[i];
}

for(i=0;i<dim_center*dim_nlcon;i=i+1)
{
C_nlcon[i]=C_nlcon1[i];
}

for(i=0;i<dim_var*dim_center;i=i+1)
{
X_center[i]=Xcenter[i];
}

for(i=0;i<dim_obj;i=i+1)
{
Weight0[i]=Weight1[i];
}
}


void Model_solver::vc_mat()
{
Engine *ep; // 定义Matlab引擎指针。
if (!(ep=engOpen(NULL))) // 测试是否启动Matlab引擎成功。
{
cout <<"Can't start Matlab engine000!" <<endl;
exit(0);
}
int nn=strlen(buffer);
mxArray *r=NULL;
mxArray *CC1 = mxCreateDoubleMatrix(1,dim_obj*dim_center, mxREAL);
mxArray *CC2 = mxCreateDoubleMatrix(1,dim_nlcon*dim_center, mxREAL);
mxArray *XX_center = mxCreateDoubleMatrix(1,dim_center*dim_var, mxREAL);
mxArray *Bound_up = mxCreateDoubleMatrix(1,dim_var, mxREAL);
mxArray *Bound_down = mxCreateDoubleMatrix(1,dim_var, mxREAL);
mxArray *Weight = mxCreateDoubleMatrix(1,dim_obj, mxREAL);

memcpy(mxGetPr(CC1), C_obj, (dim_obj*dim_center)*sizeof(double));
memcpy(mxGetPr(CC2), C_nlcon, (dim_nlcon*dim_center)*sizeof(double));
memcpy(mxGetPr(XX_center), X_center, (dim_center*dim_var)*sizeof(double));
memcpy(mxGetPr(Bound_up), Bound_up1, (dim_var)*sizeof(double));
memcpy(mxGetPr(Bound_down),Bound_down1, (dim_var)*sizeof(double));
memcpy(mxGetPr(Weight), Weight0, (dim_obj)*sizeof(double));

engPutVariable(ep, "CC1",CC1);
engPutVariable(ep, "CC2",CC2);
engPutVariable(ep, "XX_center",XX_center);
engPutVariable(ep, "Bound_up",Bound_up);
engPutVariable(ep, "Bound_down",Bound_down);
engPutVariable(ep, "Weight",Weight);

engOutputBuffer(ep,buffer,nn-1);
engEvalString(ep, "[x_opt,Y]=gen_opt(CC1,CC2,XX_center,Bound_up,Bound_down,Weight)" );

// 从buffer里读取多目标最优解
ofstream OutStream;
OutStream.open("solver_multi_opt.txt");
for(int i=0;i<nn-1;i=i+1)
{
OutStream <<buffer[i];
}

OutStream.close();

ifstream inStream;
inStream.open("solver_multi_opt.txt");
int p=-100;
i=0;
string c,d,e,f;
string SS[14]={"a1","a2","a3","a4","a5","a6","a7","a8","a9","a10","a11","a12","a13","a14"};
// char aa;
int k,l=0;
for(string s2;getline(inStream,s2)
{
istringstream sline2(s2);
sline2 >>SS[0] >>SS[1] >>SS[2] >>SS[3] >>SS[4] >>SS[5] >>SS[6] >>SS[7] >>SS[8] >>SS[9] >>SS[10] >>SS[11] >>SS[12] >>SS[13];

if(p==i)
{
if(SS[0].substr(0,1)=="C")
{
if(SS[2]=="")
{
k=1;
}
else
{
k=atoi(SS[3].c_str())-atoi(SS[1].c_str())+1;
}
p=i+2;
i=i+1;
continue;
}
else
{
for(int j=0;j<k;j=j+1)
{
solver[l]=atof(SS[j].c_str());
l=l+1;
}
p=i+2;
i=i+1;
continue;
}
}
if(SS[0]=="x0_opt")
{
p=i+2;
i=i+1;
continue;
}
else
{
i=i+1;
continue;
}
}

cout <<"The solver of the multi-objective problems is " << endl <<"solver=" <<endl <<"(";
for(i=0;i<dim_var;i=i+1)
{
if(i<dim_var-1)
{
cout << solver[i] <<", " <<endl;
continue;
}
else
{
cout << solver[i] << ")" << endl;
continue;
}
}

mxDestroyArray(CC1);
mxDestroyArray(CC2);
mxDestroyArray(XX_center);
mxDestroyArray(Bound_up);
mxDestroyArray(Bound_down);
cout <<"Press 'Enter' key to exit!" <<endl;
cin.get();
engClose(ep); //关闭Matlab引擎。
}

文件2:Model_solver.h
// Model_solver.h: interface for the Model_solver class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_MODEL_SOLVER_H__EDCC99CB_D2CC_4D42_AA32_63E2822BA9C3__INCLUDED_)
#define AFX_MODEL_SOLVER_H__EDCC99CB_D2CC_4D42_AA32_63E2822BA9C3__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

class Model_solver
{
public:
Model_solver();
virtual ~Model_solver();
void initial(int dim_var1,int dim_center1,int dim_obj1,int dim_nlcon1,double C_obj[],double C_nlcon[],double Bound_up[],double Bound_down[],double Xcenter[],double Weight1[]);
void vc_mat();

int dim_var;
int dim_center;
int dim_obj;
int dim_nlcon;

double x00[20];
double X_center[1000];
double C_obj[100];
double C_nlcon[200];
double Bound_up1[20];
double Bound_down1[20];
double solver[20];
double Weight0[10];
char buffer[90001];
};

#endif // !defined(AFX_MODEL_SOLVER_H__EDCC99CB_D2CC_4D42_AA32_63E2822BA9C3__INCLUDED_)
文件3:主文件VC_MATLAB.cpp
// VC_MATLAB.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "VC_MATLAB.h"
#include "Model_solver.h"
using namespace std;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// The one and only application object

CWinApp theApp;
/*
const int n=20;
const int m=50;
const int n_con=20;
const int n_obj=10;
int dim_var=14;
int dim_exp=28;
int dim_obj=3;
int dim_con=11;
double XX[m][n]={
{0,-1,0,1,1,1,1,0,-1,1,0,-1,1,0},
{-1,1,0,1,-1,0,0,-1,-1,1,-1,-1,-1,0},
{1,0,0,0,1,-1,1,-1,-1,0,-1,1,-1,-1},
{1,1,0,1,1,1,0,-1,1,0,1,0,0,-1},
{0,1,-1,-1,1,-1,0,0,0,-1,1,1,-1,0},
{1,1,0,0,-1,1,1,1,0,-1,0,0,-1,1},
{0,0,-1,1,0,0,1,1,1,-1,-1,1,1,1},
{0,0,0,-1,-1,-1,-1,-1,-1,-1,0,0,1,-1},
{-1,-1,1,0,-1,-1,0,1,1,0,1,1,1,0},
{0,-1,1,1,1,0,-1,1,0,0,-1,0,-1,-1},
{1,-1,1,1,-1,0,-1,0,-1,-1,1,1,0,0},
{-1,0,1,-1,1,1,1,-1,0,-1,-1,0,0,0},
{-1,1,-1,1,0,-1,1,0,-1,0,1,0,0,1},
{0,1,1,0,0,1,-1,-1,0,0,-1,1,1,1},
{1,0,-1,1,-1,1,0,0,0,1,0,1,1,-1},
{1,1,-1,0,0,-1,-1,1,1,1,-1,-1,0,0},
{-1,0,-1,-1,-1,1,-1,0,1,0,0,-1,-1,0},
{0,0,1,0,-1,-1,1,1,0,1,1,-1,0,-1},
{0,0,0,-1,0,1,-1,1,-1,1,1,0,-1,1},
{-1,1,1,-1,0,0,1,0,1,1,0,1,-1,-1},
{1,-1,0,-1,-1,-1,0,0,1,1,-1,0,0,1},
{-1,-1,-1,0,1,0,-1,-1,0,1,0,1,0,1},
{-1,0,0,0,1,0,-1,0,1,-1,1,-1,1,-1},
{1,-1,-1,-1,0,0,1,-1,0,0,1,-1,1,0},
{-1,-1,-1,0,0,1,0,1,-1,-1,-1,0,0,-1},
{0,-1,1,1,0,-1,0,-1,1,-1,0,-1,-1,1},
{1,1,1,-1,1,0,0,1,-1,0,0,-1,1,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};

double x0[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};

double C1[n_obj][n]={
{0.4501,-0.0140,-0.0435,-0.0553,0.4218,-0.0943,-0.0897,-0.1471,-0.3611,0.1038,-0.4847,0.4318,0.3462,0.1721},
{-0.2689,0.3913,-0.4815,0.1154,0.2382,0.4355,0.3936,0.3132,-0.2972,-0.2278,0.2468,-0.0340,0.0252,0.3381},
{0.1068,0.2621,0.3214,0.2919,-0.3237,0.4169,-0.4421,-0.4901,-0.3013,-0.3012,-0.0549,-0.0814,-0.2974,-0.4804}};

double C2[n_con][n]={
{-0.6270,-0.1386,-0.2202,-0.7408,-0.3613, 0.1334,-0.3486,-0.7842,-0.3582, 0.0928,-0.1592,-0.2085, 0.1669,-0.6340},
{0.1797,-0.5156,-0.0396,-0.1971,-0.3017,-0.1167,-0.7561,-0.7836,-0.4467,-0.5269,-0.6091,-0.6803,-0.1351,-0.6444},
{-0.5286,-0.3308,-0.2702,-0.7497,-0.5860,-0.5874,-0.7728,-0.6099,-0.6464,-0.5452, 0.0439,-0.7619, 0.0704,-0.6089},
{-0.5477,-0.7352,-0.1595,-0.3846,-0.1565, 0.0392,-0.4873,-0.2131,-0.1244, 0.0656,-0.6261,-0.3414,-0.7901,-0.3775},
{0.0757, 0.1883,-0.5909,-0.4950,-0.4800,-0.1712,-0.7871,-0.7424,-0.1008,-0.5676,-0.6292, 0.0699,-0.6630, 0.0560},
{-0.0627,-0.2172,-0.4202, 0.0744, 0.1601,-0.6662,-0.4160,-0.4324,-0.0725, 0.0049, 0.1943, 0.1342, 0.0188,-0.3098},
{-0.6635,-0.3765,-0.0167,-0.7850,-0.0734,-0.5929,-0.1169,-0.1685,-0.3216, 0.1084,-0.3602,-0.5356,-0.3698, 0.0159},
{-0.7882,-0.2845,-0.1192,-0.0320,-0.3880,-0.1928,-0.7072,-0.0824,-0.2452,-0.5681,-0.4600,-0.6397, 0.0903,-0.3392},
{0.0939,-0.4660,-0.3389, 0.1708,-0.0554,-0.1701,-0.7647,-0.1073,-0.6790,-0.5607,-0.4858, 0.0729,-0.0651,-0.3426},
{-0.6009,-0.3671,-0.2322, 0.1901,-0.5321,-0.4295,-0.1876,-0.7159,-0.3492,-0.7502,-0.4349,-0.5621,-0.1127,-0.3493},
{-0.5013,-0.5741,-0.0058,-0.0111,-0.3601,-0.2249,-0.1915,-0.3456,-0.0841,-0.7216,-0.4068,-0.1542,-0.4539,-0.3878}};

double bound_up0[n]={1,1,1,1,1,1,1,1,1,1,1,1,1,1};
double bound_down0[n]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};*/

const int center=10;
const int n=20;
const int m=50;
const int n_con=20;
const int n_obj=10;

int dim_var=14;
int dim_exp=28;
int dim_obj=3;
int dim_con=11;
int dim_center=5;

double X_center[10][20]={{0,-1,0,1,1,1,1,0,-1,1,0,-1,1,0},
{0,0,-1,1,0,0,1,1,1,-1,-1,1,1,1},
{1,-1,1,1,-1,0,-1,0,-1,-1,1,1,0,0},
{1,1,1,-1,1,0,0,1,-1,0,0,-1,1,1},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0}
};

double Weight[10]={0.5,0.5,0.5};

double C1[10][10]={{0.4501,0.0140,0.0435,-0.0553,0.4218},
{0.2689,0.3913,-0.4815,0.1154,0.2382},
{0.1068,0.2621,0.3214,0.2919,-0.3237}
};
double C2[20][10]={{-0.6270,-0.1386,-0.2202,-0.7408,-0.3613},
{-0.1797,-0.5156,-0.0396,-0.1971,-0.3017},
{-0.5286,-0.3308,-0.2702,-0.7497,-0.5860},
{-0.5477,-0.7352,-0.1595,-0.3846,-0.1565},
{-0.0757,-0.1883,-0.5909,-0.4950,-0.4800},
{-0.0627,-0.2172,-0.4202, 0.0744, 0.1601},
{-0.6635,-0.3765,-0.0167,-0.7850,-0.0734},
{-0.7882,-0.2845,-0.1192,-0.0320,-0.3880},
{-0.0939,-0.4660,-0.3389,-0.1708,-0.0554},
{-0.6009,-0.3671,-0.2322,-0.1901,-0.5321},
{-0.5013,-0.5741,-0.0058,-0.0111,-0.3601}
};

double bound_up0[20]={1,1,1,1,1,1,1,1,1,1,1,1,1,1};
double bound_down0[20]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;

// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
cerr << _T("Fatal Error: MFC initialization failed") << endl;
nRetCode = 1;
}
else
{
// TODO: code your application's behavior here.
CString strHello;
strHello.LoadString(IDS_HELLO);
cout << (LPCTSTR)strHello << endl;
int i,j,k=0;
double Cobj[10*n];
double Ccon[20*n];
double Xcenter[center*n];

for(i=0;i<dim_obj;i=i+1)
{
for(j=0;j<dim_center;j=j+1)
{
Cobj[k]=C1[i][j];
k=k+1;
}
}

k=0;
for(i=0;i<dim_con;i=i+1)
{
for(j=0;j<dim_center;j=j+1)
{
Ccon[k]=C2[i][j];
k=k+1;
}
}

k=0;
for(i=0;i<dim_center;i=i+1)
{
for(j=0;j<dim_var;j=j+1)
{
Xcenter[k]=X_center[i][j];
k=k+1;
}
}
Model_solver solver00;
solver00.initial(dim_var,dim_center,dim_obj,dim_con,Cobj,Ccon,bound_up0,bound_down0,Xcenter,Weight);
solver00.vc_mat();
}

return nRetCode;
}

下面使matalb文件(下面两个文件要放在matlab6.5安装路径下work文件夹下,否则将提示无法找到gen_opt函数!)
文件4:=gen_opt.m
function [x_opt,Y]=gen_opt(CC1,CC2,XX_center,Bound_up,Bound_down,Weight)

dim_var=length(Bound_up);
dim_center=length(XX_center)/dim_var;
dim_obj=length(CC1)/dim_center;
dim_nlcon=length(CC2)/dim_center;

k=1;
for i=1:dim_obj
Weigh(i)=Weight(i);
for j=1:dim_center
C_obj(i,j)=CC1(k);
k=k+1;
end
end

k=1;
for i=1:dim_nlcon
for j=1:dim_center
C_nlcon(i,j)=CC2(k);
k=k+1;
end
end

k=1;
for i=1:dim_center
for j=1:dim_var
Value_center(i,j)=XX_center(k);
k=k+1;
end
end

save C_obj C_obj;
save C_nlcon C_nlcon;
save Value_center Value_center;
save Weigh Weigh;

NIND=40;
MAXGEN=50000;
NVAR=dim_var;
PRECI=20;
GGAP=0.9;

trace=zeros (MAXGEN,2);
% 建立区域描述器(Build field descriptor)
FieldD = [rep([PRECI],[1,NVAR]);[Bound_down;Bound_up]; rep([1;0;1;1],[1,NVAR])];
Chrom = crtbp (NIND, NVAR*PRECI); % 创建初始种群
gen = 0; % 代计数器
ObjV = objfun(bs2rv (Chrom,FieldD)); % 计算初始种群个体的目标函数值
while gen < MAXGEN, % 迭代
FitnV = ranking (ObjV); % 分配适应度值(Assign fitness values)
SelCh = select ('sus',Chrom,FitnV, GGAP); % 选择
SelCh = recombin ('xovsp',SelCh,0.7); % 重组
SelCh = mut (SelCh); % 变异
x=bs2rv (SelCh,FieldD);
ObjVSel = objfun (x); % 计算子代目标函数值
[Chrom ObjV]=reins (Chrom,SelCh,1,1,ObjV,ObjVSel); % 重插入
gen = gen+1; % 代计数器增加
% 输出最优解及其对应的20个自变量的十进制值,Y为最优解,I为种群的序号
trace (gen,1)=min (ObjV); % 遗传算法性能跟踪
trace (gen,2)=sum (ObjV)/length (ObjV);
end
[Y,I]=min(ObjV);
pp=Chrom(I,;
x_opt=bs2rv(pp,FieldD);



文件5:objfun.m
function ObjVal = objfun(chrom)

load C_obj;
load C_nlcon;
load Value_center;
load Weigh;
[dim_exp,dim_var] = size(chrom);

[dim_obj,dim_center]=size(C_obj);
[dim_nlcon,dim_center]=size(C_nlcon);

Cobj=zeros(1,dim_center);

for ii=1:dim_obj
Cobj=Cobj+Weigh(ii)*C_obj(ii,;
end

ObjVal=zeros(dim_exp,1);

for ii=1:dim_exp
for jj=1:dim_center
ObjVal(ii)=ObjVal(ii)+Cobj(jj)*exp(sum(abs(chrom(ii,-Value_center(jj,)));
end
end

for ii=1:dim_exp
for jj=1:dim_nlcon
xx=0;
for kk=1:dim_center
xx=xx+C_nlcon(jj,kk)*exp(sum(abs(chrom(ii,-Value_center(kk,)));
end
if(xx<0)
ObjVal(ii)=ObjVal(ii)-1/xx;
else
ObjVal(ii)=ObjVal(ii)+1E4;
end
end
end

(3)问题所在:
现在容我把问题描述一下。为了比较matlab和visual c++调用matlab的结果是否一致,我编写了一个matlab程序来调用gen_opt函数。如下:
dim_var=14;
dim_exp=28;
dim_obj=3;
dim_nlcon=11;
dim_center=5;

XX_center=[0,-1,0,1,1,1,1,0,-1,1,0,-1,1,0,
0,0,-1,1,0,0,1,1,1,-1,-1,1,1,1,
1,-1,1,1,-1,0,-1,0,-1,-1,1,1,0,0,
1,1,1,-1,1,0,0,1,-1,0,0,-1,1,1,
0,0,0,0,0,0,0,0,0,0,0,0,0,0];

Weight=[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5];

CC1=[0.4501,0.0140,0.0435,-0.0553,0.4218,
0.2689,0.3913,-0.4815,0.1154,0.2382,
0.1068,0.2621,0.3214,0.2919,-0.3237];
CC2=[-0.6270,-0.1386,-0.2202,-0.7408,-0.3613,
-0.1797,-0.5156,-0.0396,-0.1971,-0.3017,
-0.5286,-0.3308,-0.2702,-0.7497,-0.5860,
-0.5477,-0.7352,-0.1595,-0.3846,-0.1565,
-0.0757,-0.1883,-0.5909,-0.4950,-0.4800,
-0.0627,-0.2172,-0.4202, 0.0744, 0.1601,
-0.6635,-0.3765,-0.0167,-0.7850,-0.0734,
-0.7882,-0.2845,-0.1192,-0.0320,-0.3880,
-0.0939,-0.4660,-0.3389,-0.1708,-0.0554,
-0.6009,-0.3671,-0.2322,-0.1901,-0.5321,
-0.5013,-0.5741,-0.0058,-0.0111,-0.3601];

Bound_up=[1,1,1,1,1,1,1,1,1,1,1,1,1,1];
Bound_down=[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1];

[x_opt,Y]=gen_opt(CC1,CC2,XX_center,Bound_up,Bound_down,Weight)

这个函数首先初始化一些参数,然后调用gen_opt函数实施遗传算法,这能得到一个结果。
但是我采用visual c++调用matlab后遗传算法不能运行,提示是:


Warning: Divide by zero.
(Type "warning off MATLAB:divideByZero" to suppress this warning.)
> In c:\matlab6p5\toolbox\ga\RANKING.M at line 71
In c:\matlab6p5\work\gen_opt.m at line 51
??? Error using ==> select
Chrom and FitnV disagree

Error in ==> c:\matlab6p5\work\gen_opt.m
On line 52 ==> SelCh = select ('sus',Chrom,FitnV, GGAP);% 选择

这我很奇怪,matlab和c++采用的是相同的模型,但是直接在matlab运行不会出现问题,而visual c++调用matlab就不能运行!

希望达人能帮我分析下原因!
blueye 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码


相似的主题
主题 主题作者 版面 回复 最后发表
[MATLAB图像处理] 想求一个彩色图像恢复的MATLAB的实现程序 wxpandq MATLAB论坛 1 2009-05-20 00:23
[MATLAB工具箱] 请教符号表达式的问题 panzhq MATLAB论坛 1 2009-05-07 10:06
[求助]如何做Matlab的项目管理? wangx2 MATLAB论坛 1 2008-07-16 10:37


所有时间均为北京时间。现在的时间是 16:50


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.