PDA

View Full Version : سوال: الگوریتم باینری ژنتیک



adineh67
شنبه 02 خرداد 1394, 21:31 عصر
سلام به همگی
دوستان من الگوریتم زنتیک رو میخوام روی بیست تا رشته ی بیتی پیاده سازی کنم،ممنون میشم اگه در این رابطه راهنمایی بفرمایید یا اگه سورس کدی هست در اختیارم قرار بدین :خجالت:

adineh67
یک شنبه 03 خرداد 1394, 21:00 عصر
دوستان من این کدو دارم فقط میخوام بجای کار با اعداد اعشاری با رشته های بیتی (0و1) کار کنم اگه تا یه حدی کمک کنید که خودم بتونم تغییرش بدم ممنون میشم



public partial class Sphere : Form
{
public Sphere()
{
InitializeComponent();
}
double[,] jarray=new double[100,21];
Random rnd = new Random();
double fit,rn1;
double[] child1 = new double[21];
double[] child2 = new double[21];
double[,] childs = new double[100,21];
double[,] jamiat = new double [200, 21];
double[] temp3 = new double[21];
double[] temp4 = new double[21];
int iteration = 100;
double jahesh;
int rnjahesh;
private void button1_Click(object sender, EventArgs e)
{
int iter2 = iteration;
////jamiat avalieh
for (int i = 0; i < 100; i++)
{
for (int j = 0; j < 21; j++)
{
double rn1 = rnd.NextDouble();
int rn2 = rnd.Next(-2, 2);
jarray [i, j] = rn1 + (rn2);
listBox1.Items.Add(jarray [i, j].ToString());
fit = fit + (jarray [i, j] * jarray[i, j]);

}
jarray[i, 20] = fit;
listBox1.Items.Add(jarray[i, 20].ToString());
listBox1.Items.Add("-----------" + "[" + i + "]" + "------------------");
fit = 0;

}
double min1,min2;
for (int s = 0; s < 100; s++)
{
for (int s1 = 0; s1 < 99; s1++)
{
if ((jarray [s1, 20]) > (jarray [s1 + 1, 20]))
{
for (int a = 0; a < 21; a++)
{
temp4[a] = jarray [s1, a];
jarray [s1, a] = jarray [s1 + 1, a];
jarray [s1 + 1, a] = temp4[a];

}
}
}
}

for (int i = 0; i < 100; i++)
{


listBox2.Items.Add(jarray[i, 20].ToString());
listBox2.Items.Add("-----------" + "[" + i + "]" + "------------------");

}
for (int s = 0; s < 100; s++)
{
for (int t = 0; t < 21; t++)
{
jamiat [s, t] = jarray [s, t];
}

}
////-----------------------------------------------------------
////-----------------------------------------------------------
////-----------------------------------------------------------
////-----------------------------------------------------------

while(iteration>0)
{
for (int k = 100; k < 200; k=k+2)
{
min1 = jamiat[0, 20];
min2 = jamiat[1, 20];
if (iteration == iter2)
{
textBox1.Text = min1.ToString();
textBox2.Text = min2.ToString();

}
int rnpc = rnd.Next(0, 9);// pc=0.9
// int rnpc = rnd.Next(0, 3);//pc=0.75
//int rnpc = rnd.Next(0,1);//pc=0.5
if(rnpc!=1)

{
int rnvaled1 = rnd.Next(0, 9);
for (int i = 0; i < rnvaled1; i++)
{
child1[i] = jamiat[0, i];
child2[i] = jamiat[1, i];

}
for (int i = rnvaled1; i < 21; i++)
{
child1[i] = jamiat[1, i];
child2[i] = jamiat[0, i];

}

}

//-------------------jahesh------
for (int j = 0; j < 20; j++)
{
int rnpm = rnd.Next(0, 99);//pm=0.01

if (rnpm == 67)
{

rnjahesh = rnd.Next(-2, 2);
rn1 = rnd.NextDouble();
jahesh = rnjahesh + rn1;
child1[j] = jahesh;
listBox4.Items.Add("ch1:" + child1[j]);
//-----------------/////////
rnjahesh = rnd.Next(-2, 2);
rn1 = rnd.NextDouble();
jahesh = rnjahesh + rn1;
child2[j] = jahesh;
listBox4.Items.Add("ch2:"+child2[j]);

}
}
//---------fit child1,2
for (int j = 0; j < 20; j++)
{
fit = fit + (child1[j] * child1[j]);
}
child1[20] = fit;
listBox3.Items.Add(child1[20].ToString());
listBox3.Items.Add("-----------" + "[" + "child1" + "]" + "------------------");
fit = 0;
//----

for (int j = 0; j < 20; j++)
{
fit = fit + (child2[j] * child2[j]);
}
child2[20] = fit;
listBox3.Items.Add(child2[20].ToString());
listBox3.Items.Add("-----------" + "[" + "child2" + "]" + "------------------");
fit = 0;

//--------------


for (int j = 0; j < 21; j++)
{
jamiat[k, j] = child1[j];
jamiat [k + 1, j] = child2[j];
}
}//end for after while

//***********************************Sorted Jameat

for (int s = 0; s < 200; s++)
{
for (int s1 = 0; s1 < 199; s1++)
{
if ((jamiat [s1, 20]) > (jamiat [s1 + 1, 20]))
{
for (int a = 0; a < 21; a++)
{
temp3[a] = jamiat [s1, a];
jamiat [s1, a] = jamiat [s1 + 1, a];
jamiat [s1 + 1, a] = temp3[a];

}
}
}

}


iteration--;
}
textBox3.Text = jamiat[0, 20].ToString();
}


}