@@ -34,7 +34,7 @@ private void Form1_Load(object sender, EventArgs e)
34
34
35
35
36
36
baglanti = new SqlConnection ( "Data Source = BASRI\\ BASRI; Initial Catalog = GA-ARP-3; Integrated Security = True" ) ;
37
- da = new SqlDataAdapter ( "Select *From Müsteriler order by Acılar " , baglanti ) ;
37
+ da = new SqlDataAdapter ( "Select *From Müsteriler" , baglanti ) ;
38
38
ds = new DataSet ( ) ;
39
39
DataTable dt = new DataTable ( ) ;
40
40
baglanti . Open ( ) ;
@@ -82,15 +82,15 @@ private void Form1_Load(object sender, EventArgs e)
82
82
83
83
84
84
85
- for ( i = 0 ; i < MüşteriSayısı ; i ++ )
85
+ /* for (i = 0; i < MüşteriSayısı; i++)
86
86
for (j = 0; j < MüşteriSayısı; j++)
87
87
{
88
88
Uzaklık[i, j] = Math.Pow(Convert.ToDouble(MusteriGridWiew.Rows[i].Cells[1].Value) - Convert.ToDouble(MusteriGridWiew.Rows[j].Cells[1].Value), 2);
89
89
Uzaklık[i, j] += Math.Pow(Convert.ToDouble(MusteriGridWiew.Rows[i].Cells[2].Value) - Convert.ToDouble(MusteriGridWiew.Rows[j].Cells[2].Value), 2);
90
90
Uzaklık[i, j] = Math.Sqrt(Uzaklık[i, j]);
91
91
Uzaklık[i, j] = Math.Ceiling(Uzaklık[i, j]);
92
92
// listBox1.Items.Add(Uzaklık[i, j]);
93
- }
93
+ }*/
94
94
}
95
95
96
96
private void button1_Click ( object sender , EventArgs e )
@@ -100,85 +100,163 @@ private void button1_Click(object sender, EventArgs e)
100
100
int [ ] Çözüm = new int [ MüsteriSayisi ] ;
101
101
int [ ] EnİyiÇözüm = new int [ MüsteriSayisi ] ;
102
102
double [ , ] Uzaklık = new double [ MüsteriSayisi , MüsteriSayisi ] ;
103
+ double [ ] Sonuç = new double [ MüsteriSayisi ] ;
103
104
int i , j ;
104
- double Sonuç , EnİyiSonuç ;
105
+ double EnİyiSonuç ;
105
106
for ( i = 0 ; i < MüsteriSayisi ; i ++ )
106
107
for ( j = 0 ; j < MüsteriSayisi ; j ++ )
107
108
{
108
109
Uzaklık [ i , j ] = Math . Pow ( Convert . ToDouble ( MusteriGridWiew . Rows [ i ] . Cells [ 1 ] . Value ) - Convert . ToDouble ( MusteriGridWiew . Rows [ j ] . Cells [ 1 ] . Value ) , 2 ) ;
109
110
Uzaklık [ i , j ] += Math . Pow ( Convert . ToDouble ( MusteriGridWiew . Rows [ i ] . Cells [ 2 ] . Value ) - Convert . ToDouble ( MusteriGridWiew . Rows [ j ] . Cells [ 2 ] . Value ) , 2 ) ;
110
111
Uzaklık [ i , j ] = Math . Sqrt ( Uzaklık [ i , j ] ) ;
111
112
Uzaklık [ i , j ] = Math . Ceiling ( Uzaklık [ i , j ] ) ;
112
- listBox1 . Items . Add ( Uzaklık [ i , j ] ) ;
113
+ //listBox1.Items.Add(String.Format("{0}\n {1} \n {2}", i, j,Uzaklık[i, j]));
114
+
113
115
}
114
- for ( i = 0 ; i < MüsteriSayisi ; i ++ )
116
+ #region Parçacık Rotaları Süpürme Algoritması Yöntemi ile Oluşturulu
117
+ //a'yı burda tanımlamamızın sebebi rota hafızası için
118
+ int Mus1 , Mus2 , Min ;
119
+ EnİyiSonuç = 0 ;
120
+ List < Musteri > bireyinMusterileri = MusteriListesi . CloneList ( ) . ToList ( ) ;
121
+ for ( int c = 0 ; c < MüsteriSayisi - 1 ; c ++ )
115
122
{
116
- Çözüm [ i ] = i ;
117
- }
118
- Sonuç = Geography . AmaçFonkHesapla ( MüsteriSayisi , Çözüm , Uzaklık ) ;
119
- Array . Copy ( Çözüm , EnİyiÇözüm , Çözüm . Length ) ;
120
- EnİyiSonuç = Sonuç ;
123
+
124
+ List < Araclar > bireyinAraclari = Araclist . CloneList ( ) . ToList ( ) ;
125
+ //string Guzergah = " ";
126
+ string [ ] Guzergah = new string [ MüsteriSayisi ] ;
127
+ Sonuç [ c ] = 0 ;
128
+ listBox1 . Items . Add ( String . Format ( "{0}" , Guzergah ) ) ;
129
+ int a = 0 ;
121
130
122
- int Mus1 , Mus2 , Son ;
131
+ if ( c != 0 && c < MüsteriSayisi - 1 )
132
+ {
133
+
134
+ _ = new Musteri ( ) ;
135
+ Musteri insert = bireyinMusterileri [ 1 ] ;
136
+ bireyinMusterileri . RemoveAt ( 1 ) ;
137
+ bireyinMusterileri . Add ( insert ) ;
138
+
139
+ for ( int b = 0 ; b < bireyinAraclari . Count ; b ++ )
140
+ {
123
141
142
+ if ( a != 0 && a < MüsteriSayisi )
143
+ {
144
+ Mus1 = bireyinMusterileri [ 0 ] . ID ;
145
+ Guzergah [ c ] += "*" + Convert . ToString ( Mus1 ) ;
146
+ Mus2 = bireyinMusterileri [ a ] . ID ;
147
+ Sonuç [ c ] += Uzaklık [ Mus1 , Mus2 ] ;
148
+ }
149
+ if ( a == MüsteriSayisi )
150
+ {
151
+ Mus2 = bireyinMusterileri [ 0 ] . ID ;
152
+ Guzergah [ c ] += "*" + Convert . ToString ( Mus2 ) ;
153
+ listBox1 . Items . Add ( String . Format ( "{0}" , Guzergah [ c ] ) ) ;
154
+ Mus1 = bireyinMusterileri [ a - 1 ] . ID ;
155
+ Sonuç [ c ] += Uzaklık [ Mus1 , Mus2 ] ;
156
+ for ( i = 0 ; i <= c ; i ++ )
157
+ {
158
+ if ( EnİyiSonuç > Sonuç [ i ] )
159
+ EnİyiSonuç = Sonuç [ i ] ;
160
+ }
161
+ listBox1 . Items . Add ( Sonuç [ c ] . ToString ( ) ) ;
162
+ listBox1 . Items . Add ( EnİyiSonuç . ToString ( ) ) ;
163
+ break ;
164
+ }
165
+ for ( a = a ; a < MüsteriSayisi ; a ++ )
166
+ {
167
+ try
168
+ {
169
+ if ( bireyinAraclari [ b ] . Kullanildimi == false && bireyinMusterileri [ a ] . Talep <= bireyinAraclari [ b ] . Kapasite && bireyinMusterileri [ a ] . Gidildimi == false )
170
+ {
171
+ Mus1 = bireyinMusterileri [ a ] . ID ;
172
+ bireyinAraclari [ b ] . Kapasite = bireyinAraclari [ b ] . Kapasite - bireyinMusterileri [ a ] . Talep ;
173
+ Guzergah [ c ] += "*" + Convert . ToString ( Mus1 ) ;
174
+ Mus2 = bireyinMusterileri [ a + 1 ] . ID ;
175
+ // bireyinMusterileri[a].Gidildimi = true;
176
+ if ( bireyinMusterileri [ a + 1 ] . Talep < bireyinAraclari [ b ] . Kapasite )
177
+ {
178
+ Sonuç [ c ] += Uzaklık [ Mus1 , Mus2 ] ;
179
+ }
180
+ }
181
+ else
182
+ {
183
+ //döngü bitince Yeni araca geçer fakat a değeri kaldığı yerden devam eder.
184
+ Mus1 = bireyinMusterileri [ a - 1 ] . ID ;
185
+ Mus2 = bireyinMusterileri [ 0 ] . ID ;
186
+ Guzergah [ c ] += "*" + Convert . ToString ( Mus2 ) + "---" ;
187
+ //bireyinAraclari[b].Kullanildimi = true;
188
+ Sonuç [ c ] += Uzaklık [ Mus1 , Mus2 ] ;
189
+ break ;
190
+ }
191
+ }
192
+ catch ( Exception )
193
+ {
124
194
125
- List < Araclar > bireyinAraclari = Araclist . CloneList ( ) . ToList ( ) ;
126
- List < Musteri > bireyinMusterileri = MusteriListesi . CloneList ( ) . ToList ( ) ;
127
- //a'yı burda tanımlamamızın sebebi rota hafızası için
128
- int a = 0 ;
129
- string Guzergah = " " ;
130
- Sonuç = 0 ;
131
- for ( int b = 0 ; b < bireyinAraclari . Count ; b ++ )
132
- {
133
- if ( a == MüsteriSayisi )
134
- {
135
- Mus1 = bireyinMusterileri [ 0 ] . ID ;
136
- Guzergah += "*" + Convert . ToString ( Mus1 ) ;
137
- listBox1 . Items . Add ( String . Format ( "{0}" , Guzergah ) ) ;
138
- Sonuç += Uzaklık [ a - 1 , 0 ] ;
139
- listBox1 . Items . Add ( Sonuç . ToString ( ) ) ;
140
- break ;
141
- }
142
- if ( a != 0 && a < MüsteriSayisi - 1 )
143
- {
144
- Mus1 = bireyinMusterileri [ 0 ] . ID ;
145
- Guzergah += "*" + Convert . ToString ( Mus1 ) ;
146
- Sonuç += Uzaklık [ 0 , a ] ;
195
+ }
196
+ }
197
+ }
147
198
}
148
- for ( a = a ; a < MüsteriSayisi ; a ++ )
199
+ else
149
200
{
150
- try
201
+ for ( int b = 0 ; b < bireyinAraclari . Count ; b ++ )
151
202
{
152
- if ( bireyinAraclari [ b ] . Kullanildimi == false && bireyinMusterileri [ a ] . Talep <= bireyinAraclari [ b ] . Kapasite && bireyinMusterileri [ a ] . Gidildimi == false )
203
+
204
+ if ( a != 0 && a < MüsteriSayisi )
153
205
{
154
- Mus1 = bireyinMusterileri [ a ] . ID ;
155
- bireyinAraclari [ b ] . Kapasite = bireyinAraclari [ b ] . Kapasite - bireyinMusterileri [ a ] . Talep ;
156
- Guzergah += "*" + Convert . ToString ( Mus1 ) ;
157
- bireyinMusterileri [ a ] . Gidildimi = true ;
158
- if ( bireyinMusterileri [ a + 1 ] . Talep < bireyinAraclari [ b ] . Kapasite )
159
- {
160
- Sonuç += Uzaklık [ a , a + 1 ] ;
161
- }
206
+ Mus1 = bireyinMusterileri [ 0 ] . ID ;
207
+ Guzergah [ c ] += "*" + Convert . ToString ( Mus1 ) ;
208
+ Mus2 = bireyinMusterileri [ a ] . ID ;
209
+ Sonuç [ c ] += Uzaklık [ Mus1 , Mus2 ] ;
162
210
}
163
- else
211
+ if ( a == MüsteriSayisi )
164
212
{
165
- //döngü bitince Yeni araca geçer fakat a değeri kaldığı yerden devam eder.
166
- Mus1 = bireyinMusterileri [ 0 ] . ID ;
167
- Guzergah += "*" + Convert . ToString ( Mus1 ) + "---" ;
168
-
169
- bireyinAraclari [ b ] . Kullanildimi = true ;
170
- Sonuç += Uzaklık [ a - 1 , 0 ] ;
213
+ Mus2 = bireyinMusterileri [ 0 ] . ID ;
214
+ Guzergah [ c ] += "*" + Convert . ToString ( Mus2 ) ;
215
+ listBox1 . Items . Add ( String . Format ( "{0}" , Guzergah [ c ] ) ) ;
216
+ Mus1 = bireyinMusterileri [ a - 1 ] . ID ;
217
+ Sonuç [ c ] += Uzaklık [ Mus1 , Mus2 ] ;
218
+ EnİyiSonuç = Sonuç [ c ] ;
219
+ listBox1 . Items . Add ( Sonuç [ c ] . ToString ( ) ) ;
220
+ listBox1 . Items . Add ( EnİyiSonuç . ToString ( ) ) ;
171
221
break ;
172
222
}
173
-
174
- }
175
- catch ( Exception )
176
- {
223
+ for ( a = a ; a < MüsteriSayisi ; a ++ )
224
+ {
225
+ try
226
+ {
227
+ if ( bireyinAraclari [ b ] . Kullanildimi == false && bireyinMusterileri [ a ] . Talep <= bireyinAraclari [ b ] . Kapasite && bireyinMusterileri [ a ] . Gidildimi == false )
228
+ {
229
+ Mus1 = bireyinMusterileri [ a ] . ID ;
230
+ bireyinAraclari [ b ] . Kapasite = bireyinAraclari [ b ] . Kapasite - bireyinMusterileri [ a ] . Talep ;
231
+ Guzergah [ c ] += "*" + Convert . ToString ( Mus1 ) ;
232
+ Mus2 = bireyinMusterileri [ a + 1 ] . ID ;
233
+ //bireyinMusterileri[a].Gidildimi = true;
234
+ if ( bireyinMusterileri [ a + 1 ] . Talep < bireyinAraclari [ b ] . Kapasite )
235
+ {
236
+ Sonuç [ c ] += Uzaklık [ Mus1 , Mus2 ] ;
237
+ }
238
+ }
239
+ else
240
+ {
241
+ //döngü bitince Yeni araca geçer fakat a değeri kaldığı yerden devam eder.
242
+ Mus1 = bireyinMusterileri [ a - 1 ] . ID ;
243
+ Mus2 = bireyinMusterileri [ 0 ] . ID ;
244
+ Guzergah [ c ] += "*" + Convert . ToString ( Mus2 ) + "---" ;
245
+ bireyinAraclari [ b ] . Kullanildimi = true ;
246
+ Sonuç [ c ] += Uzaklık [ Mus1 , Mus2 ] ;
247
+ break ;
248
+ }
249
+ }
250
+ catch ( Exception )
251
+ {
177
252
253
+ }
254
+ }
178
255
}
179
256
}
180
-
181
257
}
258
+ #endregion
259
+ listBox1 . Items . Add ( EnİyiSonuç . ToString ( ) ) ;
182
260
}
183
261
}
184
262
internal static class Extensions
@@ -187,5 +265,13 @@ public static IList<T> CloneList<T>(this IList<T> list) where T : ICloneable
187
265
{
188
266
return list . Select ( item => ( T ) item . Clone ( ) ) . ToList ( ) ;
189
267
}
268
+ public static IList < T > Swap < T > ( this IList < T > list , int indexA , int indexB )
269
+ {
270
+ T tmp = list [ indexA ] ;
271
+ list [ indexA ] = list [ indexB ] ;
272
+ list [ indexB ] = tmp ;
273
+ return list ;
274
+ }
190
275
}
276
+
191
277
}
0 commit comments