该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
double StdDE::EnergyFunction(double *PopVector,bool &bAtSolution)
{
if (!(ep = engOpen(NULL))) //测试是否启动Matlab引擎成功。
{
cout << "Can't start Matlab engine!" << endl;
exit(1);
}
xx = mxCreateDoubleMatrix(1, nDim, mxREAL);
factor = mxCreateDoubleMatrix(1, 1, mxREAL);//修改了
/*double kk = 2;
double * tempNum;
*tempNum = kk;
memcpy(mxGetPr(factor),tempNum, sizeof(double));
engPutVariable(ep, "factor",factor);*/
memcpy(mxGetPr(xx), PopVector, nDim*sizeof(double)); //将数组x复制到mxarray数组xx中。
engPutVariable(ep, "xx",xx); //将mxArray数组xx写入到Matlab工作空间,命名为xx
//cout << "1" << endl;
engEvalString(ep, "cd C:\\Co-saliency\\2.1-subiCoseg\\Co-Saliency-work\\DETrainIVDimCodetection_12\\");
//cout << "2" << endl;
engEvalString(ep, "meanFmeasure = -IVDimCoDetectionTime(xx,1)");
//cout << "3" << endl;
temp = engGetVariable(ep, "meanFmeasure");
//cout << "4" << endl;
double Fmeasure = mxGetScalar(temp);
engEvalString(ep,"clear all");
mxDestroyArray(xx);//修改了
mxDestroyArray(temp);
mxDestroyArray(factor);
engEvalString(ep,"close;");
engClose(ep); //关闭Matlab引擎。//修改了
return Fmeasure;
}