C++ Neural Networks and Fuzzy Logic: Preface



Download 1,14 Mb.
Pdf ko'rish
bet361/443
Sana29.12.2021
Hajmi1,14 Mb.
#77367
1   ...   357   358   359   360   361   362   363   364   ...   443
Bog'liq
C neural networks and fuzzy logic

Source File Listing

The following is the source file listing for the Kohonen approach to the traveling salesperson problem.



Listing 15.4 Source file for C++ program for Kohonen’s approach

//tsp_kohn.cpp  V.Rao, H.Rao

#include “tsp_kohn.h”

void city_neuron::get_neuron(double a,double b)

       {

       x = a;

       y = b;

       mark = 0;

       count = 0;

       weight[0] = 0.0;

       weight[1] = 0.0;

       };

tspnetwork::tspnetwork(int k,double f,double q,double h,

double *ip0,double *ip1)

C++ Neural Networks and Fuzzy Logic:Preface

Other Approaches to Solve the Traveling Salesperson Problem

367



       {

       int i;

       gain = h;

       gain_factor = f;

       citycount = k;

       // distances between neurons as integers between 0 and n−1

       get_d();

       print_d();

       cout<<”\n”;

       // input vectors

       get_input(ip0,ip1);

       print_input();

       // neurons in the network

       for(i=0;i

              {

              order[i] = citycount+1;

              diffsq[i] = q;

              cnrn[i].get_neuron(ip0[i],ip1[i]);

              cnrn[i].order = citycount +1;

              }

       }

void tspnetwork::associate_city()

       {

       int i,k,j,u;

       double r,s;

       for(u=0;u

              {

              //start a new iteration with the input vectors

              for(j=0;j

                       {

                       for(i=0;i

                              {

                              if(cnrn[i].mark==0)

                                      {

                                      k = i;

                                      i =citycount;

                                      }

                              }

                       //find the closest neuron

                       for(i=0;i

                              {

                              r = input[j][0] − cnrn[i].weight[0];

                              s = input[j][1] − cnrn[i].weight[1];

                              diffsq[i] = r*r +s*s;

                              if(diffsq[i]

                              }

                       chosen_city = k;

                       cnrn[k].count++;

                       if((cnrn[k].mark<1)&&(cnrn[k].count==2))

                              {

C++ Neural Networks and Fuzzy Logic:Preface

Other Approaches to Solve the Traveling Salesperson Problem

368



                              //associate a neuron with a position

                              cnrn[k].mark = 1;

                              cnrn[k].order = u;

                              order[u] = chosen_city;

                              index = j;

                              gain *= gain_factor;

                              //modify weights

                              modify_weights(k,index);

                              print_weights();

                              j = citycount;

                              }

                       }

              }

       }


void tspnetwork::find_tour()

       {


       int i;

       for(i=0;i

              {

              associate_city();

              }

              //associate the last neuron with remaining position in

       // tour

              for(i=0;i

                       {

                       if( cnrn[i].mark ==0)

                              {

                              cnrn[i].order = citycount−1;

                              order[citycount−1] = i;

                              cnrn[i].mark = 1;

                              }

                       }

                       //print out the tour.

                       //First the neurons in the tour order

                       //Next cities in the tour

                       //order with their x,y coordinates

                       print_tour();

              }

void tspnetwork::get_input(double *p,double *q)

       {


       int i;

       for(i=0;i

              {

              input[i][0] = p[i];

              input[i][1] = q[i];

              }

       }

//function to compute distances (between 0 and n−1) between

//neurons

void tspnetwork::get_d()

       {

       int i,j;

C++ Neural Networks and Fuzzy Logic:Preface

Other Approaches to Solve the Traveling Salesperson Problem

369



       for(i=0;i

              {

              for(j=0;j

                      {

                      d[i][j] = (j−i);

                      if(d[i][j]<0) d[i][j] = d[j][i];

                      }

              }

       }

//function to find the change in weight component

double tspnetwork::wtchange(int m,int l,double g,double h)

       {


       double r;

       r = exp(−d[m][l]*d[m][l]/gain);

       r *= (g−h)/sqrt(2*pi);

       return r;

       }

//function to determine new weights

void tspnetwork::modify_weights(int jj,int j)

       {


       int i;

       double t;

       double w[2];

       for(i=0;i

              {

              w[0] = cnrn[i].weight[0];

              w[1] = cnrn[i].weight[1];

              //determine new first component of weight

              t = wtchange(jj,i,input[j][0],w[0]);

              w[0] = cnrn[i].weight[0] +t;

              cnrn[i].weight[0] = w[0];

              //determine new second component of weight

              t = wtchange(jj,i,input[j][1],w[1]);

              w[1] = cnrn[i].weight[1] +t;

              cnrn[i].weight[1] = w[1];

              }

       }

//different print routines

void tspnetwork::print_d()

       {


       int i,j;

       cout<<”\n”;

       for(i=0;i

              {

              cout<<” d: “;

              for(j=0;j

                      {

                      cout<

                      }

              cout<<”\n”;

              }

       }


void tspnetwork::print_input()

C++ Neural Networks and Fuzzy Logic:Preface

Other Approaches to Solve the Traveling Salesperson Problem

370



       {

       int i,j;

       for(i=0;i

              {

              cout<<”input : “;

              for(j=0;j<2;j++)

                      {

                      cout<

                      }

              cout<<”\n”;

              }

       }


void tspnetwork::print_weights()

       {


       int i,j;

       cout<<”\n”;

       for(i=0;i

              {

              cout<<” weight: “;

              for(j=0;j<2;j++)

                      {

                      cout<

                      }

              cout<<”\n”;

              }

       }


void tspnetwork::print_tour()

       {


       int i,j;

       cout<<”\n tour : “;

       for(i=0;i

              {

              cout< “;

              }

       cout<

       for(i=0;i

              {

              j = order[i];

              cout<<”(“< “;

              }

       j= order[0];

       cout<<”(“<

       }

void main()

       {

       int nc= 5;//nc = number of cities

       double q= 0.05,h= 1.0,p= 1000.0;

       double input2[][5]= {7.0,4.0,14.0,0.0,5.0,3.0,6.0,13.0,12.0,10.0};

       tspnetwork tspn2(nc,q,p,h,input2[0],input2[1]);

       tspn2.find_tour();

       }

C++ Neural Networks and Fuzzy Logic:Preface

Other Approaches to Solve the Traveling Salesperson Problem

371



Previous Table of Contents Next

Copyright ©

 IDG Books Worldwide, Inc.

C++ Neural Networks and Fuzzy Logic:Preface

Other Approaches to Solve the Traveling Salesperson Problem

372




Download 1,14 Mb.

Do'stlaringiz bilan baham:
1   ...   357   358   359   360   361   362   363   364   ...   443




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish