file3<<"\n"<<list_p[g].x<<" "<<list_p[g].y<<" "<<0;
g++;
}
flag_s=1;
}
}
// Завершение минимизации
printf("\nEnd.\nPress any key...");
getch();
file2.close();
exit(0);
}
float f(float x, float y, float z, int i, point *list_p)
{
float f, s, r, s_p, r_p;
int j;
// Подсчет энергии отталкивания и энергии соединения
float w1, w2, w3, ws, g;
r=0;
s=0;
for (j=1; j<=num_s[i]; j++)
{
// Расчет расстояния до соседа
w1=pow((x-list_p[sos[i][j]-1].x), 2);
w2=pow((y-list_p[sos[i][j]-1].y), 2);
ws=sqrt(w1+w2);
w1=pow((w[i][j]-ws),5);
w2=pow(((ws-w[i][j])/(w[i][j])),5);
if (ws<=w[i][j])
{
r_p=c*(w1/ws);
s_p=0;
}
else
{
r_p=0;
s_p=c*w2;
}
r=r+r_p;
s=s+s_p;
}
//Подсчет составляющей энергии сдвига
float r1, r2, r3, p_p, u1, t, trellis;
trellis=0;
for (j=1; j<=num_s[i]; j++)
{
if ((((num_s[i]==4)&&((j==1)||(j==2)))||((num_s[i]==2)&&(j==1))||((num_s[i]==3)&&
(type_s[i]==1)&&((j==1)||(j==2)))||((num_s[i]==3)&&(type_s[i]==2)&&(j==1)))&&
(list_p[sos[i][j]-1].y==y))
{
//Обработка ситуации, когда верхний или нижний сосед четко лежат на вертикали
u1=0;
}
else
{
if ((((num_s[i]==4)&&((j==3)||(j==4)))||((num_s[i]==2)&&(j==2))||((num_s[i]==3)&&
(type_s[i]==1)&&(j==1))||((num_s[i]==3)&&(type_s[i]==2)&&((j==2)||(j==3))))&&
((list_p[sos[i][j]-1].x==x)))
{
//Обработка ситуации, когда левый или правый сосед четко лежат на горизонтале
u1=0;
}
else
{
// Расчет расстояния до соседа
w1=pow((x-list_p[sos[i][j]-1].x), 2) ;
w2=pow((y-list_p[sos[i][j]-1].y), 2) ;
ws=sqrt(w1+w2);
//cout<<"\n r1="<<ws;
r1=ws;
if (((num_s[i]==4)&&((j==1)||(j==2)))||((num_s[i]==2)&&(j==1))||((num_s[i]==3)&&
(type_s[i]==1)&&((j==1)||(j==2)))||((num_s[i]==3)&&(type_s[i]==2)&&(j==1)))
{
//Расчет х-вой составляющей до соседа
w1=pow((x-list_p[sos[i][j]-1].x), 2);
w2=0;
}
else
{
//Расчет у-вой составляющей до соседа
w1=0;
w2=pow((y-list_p[sos[i][j]-1].y), 2);
}
ws=sqrt(w1+w2);
r2=ws;
if (((num_s[i]==4)&&((j==1)||(j==2)))||((num_s[i]==2)&&(j==1))||((num_s[i]==3)&&
(type_s[i]==1)&&((j==1)||(j==2)))||((num_s[i]==3)&&(type_s[i]==2)&&(j==1)))
{
w1=0;
w2=pow((list_p[sos[i][j]-1].y-y), 2);
}
else
{
w1=pow((list_p[sos[i][j]-1].x-x), 2) ;
w2=0;
}
ws=sqrt(w1+w2);
r3=ws;
p_p=(r1+r2+r3)/2;
u1=2*asin(sqrt((p_p-r1)*(p_p-r3)/(r1*r3)));
}
}
t=w[i][j]*k1*(u1*sin(u1)+cos(u1));
trellis=trellis+t;
}
//Подсчет общей энергии (целевая функция)
f=r+s+trellis;
return f;
}
Приложение 2.
Содержимое входных и выходных файлов с тестовой моделью.
coords.dat
36
0 0 8
0 1 7.937254
0 2 7.745967
0 3 7.416198
0 4 6.928203
0 5 6.244998
1 0 7.937254
1 1 7.874008
1 2 7.681146
1 3 7.34847
1 4 6.855655
1 5 6.164414
2 0 7.745967
2 1 7.681146
2 2 7.483315
2 3 7.141428
2 4 6.63325
2 5 5.91608
3 0 7.416198
3 1 7.348469
3 2 7.141428
3 3 6.782330
3 4 6.244998
3 5 5.477226
4 0 6.928203
4 1 6.855654
4 2 6.63325
4 3 6.244998
4 4 5.656854
4 5 4.795832
5 0 6.244998
5 1 6.164414
5 2 5.91608
5 3 5.477226
5 4 4.795832
5 5 3.741657
num_s.dat
2
3
3
3
3
2
3
4
4
4
4
3
3
4
4
4
4
3
3
4
4
4
4
3
3
4
4
4
4
3
2
3
3
3
3
2
sosedi.dat
2 7
1 3 8
2 4 9
3 5 10
4 6 11
5 12
8 1 13
7 9 2 14
8 10 3 15
9 11 4 16
10 12 5 17
11 6 18
14 7 19
13 15 8 20
14 16 9 21
15 17 10 22
16 18 11 23
17 12 24
20 13 25
19 21 14 26
20 22 15 27
21 23 16 28
22 24 17 29
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.