//本函数用于---- - 利用新加入EP的解去更新信息素矩阵
//tau:cell变量含有K个信息素矩阵,newinEP记录新加入EP的编号
//g保存的是所有objectives对应的g值,gmin是g中最小的
#include"HEAD.h"
int Tau_update2(vector > > &tau, double(*wets)[M], vectornewinEP, vector >chroms)
{
double weights[colonysize][M];
for (int i = 0; i < colonysize; ++i)
for (int j = 0; j < M; ++j)
weights[i][j] = wets[i][j];
int size = chroms.size();
vector > temp;
for (int i = 0; i < chroms.size(); ++i)
{
vector temp_temp;
for (int j = 0; j < M; ++j)
temp_temp.push_back(chroms[i][N + j]);
temp.push_back(temp_temp);
temp_temp.erase(temp_temp.begin(),temp_temp.end());
}
vector<double> g;
vector<vector<double> >weigh;
for (int i = 0; i < size; ++i)
{
vector<double> f(weights[i],weights[i]+M);
weigh.push_back(f);
f.erase(f.begin(), f.end());
}
evaluate_g(temp, weigh, g);
weigh.clear();
vector<vector<double> >().swap(weigh);
double min_g = *min_element(g.begin(), g.end());
gmin = min(min_g, gmin);
int num_newinEP = newinEP.size();
vector<double> w1(N, 0);
vector<vector<double> >w;
for (int i = 0; i < N; ++i)
w.push_back(w1);
w1.clear();
vector<double>().swap(w1);
double tau_max = (double)(num_newinEP + 1) / ((1 - Rho)*(1 + gmin));
double tau_min = tau_max / (2 * N);
Delta = 0.05*tau_max;
double f[K][N][N];
for (int k1 = 0; k1 < K; ++k1)
for (int i1 = 0; i1 < N; ++i1)
for (int j1 = 0; j1 < N; ++j1)
f[k1][i1][j1] = tau[k1][i1][j1]*Rho;
for (int i = 0; i < num_newinEP; ++i)
{
int group_index = ceil((double)(newinEP[i] * K) / colonysize);
for (int j = 0; j < N; ++j)
{
int m = (int)chroms[newinEP[i]][j];
w[j][m] = 1;
}
double t = 1 / (1 + g[newinEP[i]]);
for (int k = 0; k < N; ++k)
for (int l = 0; l < N; ++l)
{
f[group_index][k][l] += (w[k][l]+w[l][k]) * t;
}
}
//MAX-MIN
for (int j2 = 0; j2 < K; ++j2)
{
for (int k2= 0; k2 < N; ++k2)
for (int l2 = 0; l2 < N; ++l2)
{
if (f[j2][k2][l2]>tau_max)
f[j2][k2][l2] = tau_max;
if (f[j2][k2][l2] < tau_min)
f[j2][k2][l2] = tau_min;
}
}
for (int k3 = 0; k3 < K; ++k3)
for (int i3 = 0; i3 < N; ++i3)
for (int j3 = 0; j3< N; ++j3)
tau[k3][i3][j3] = f[k3][i3][j3];
return 0;
}
其中K=5,colonysize=50,N=62
在中断时指向到95行的return语句上。
为什么会出现这种情况,在哪出现错误?
查百度是说指向空指针,可为什么没发现?
求大神指教