/* gcc melsimp.c -o xmel -lm to compile */
/* xmel > resu to execute */
/* gnuplot plotresu to plot results using gnuplot */
/* plotresu is simply: */
/* plot 'resu' using 1:2 title "opinions " with points */
/* pause -1 "Hit return to continue" */
/* libraries --------------------------------------------------------*/
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
/* constants : partie calcul ----------------------------------------*/
#define MAXINT 2147483647 /* for random sampling */
#define L 200 /* number of agents */
float a[L],mu,d,cardis,av; /* opinions, speed of updating, threshold, squared distances */
int i, ix, iy, k; /* loop indices */
int nbiter,t; /* iterations number, random number seed */
int r0 (int s); /* random number routines */
float r01();
/*-------------------------------------------------------------------*/
float r01()
{ float j;
j=rand();
return (j / (float)MAXINT);
}
/*-------------------------------------------------------------------*/
int r0 (int s)
{ return (random () % s); }
/*------------------------------------------------------------------*/
main ()
{
mu=0.3; /* change parameters in these four lines */
d=0.2;
t=54783;
nbiter=10000;
srandom (t);
for (i=0;i<l;i++) a[i]=r01();
for (k = 0; k < nbiter; k++)
{ ix = (int)(r01()*L);
iy = (int)(r01()*L);
cardis=(a[ix]-a[iy])*(a[ix]-a[iy]);
if (cardis<d*d)
{av=a[ix];
a[ix]=a[ix]+mu*(a[iy]-a[ix]);
a[iy]=a[iy]+mu*(av-a[iy]);
printf ("%d %f %f \n", k, a[ix],a[iy]); }
}
}