Tabu Arama Algoritması C#
-
Merhaba arkadaşlar bir arkadaşımın c# tarafında takıldığı bir nokta var şöyleki
16 alan var 16 istasyonu bu alanlara atayacağım. bunu rassal olarak üretip maliyeti hesaplayacağım. eğer yeni maliyet öncekinden küçükse bunu çözüme almayacak. tabu list diye çözüm kümesi tanımlayıp bu listenin uzunluğu bana bağlı. mesela 20 olsun. 21.geldiğinde 1.yi silecek. durdurma koşulu da bize bağlı örneğin 1000 iterasyondan sonra dursun.
ben rassal kısmı ürettim fakat matristen o değerleri çek komutunu yazamadım.using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication5 { class Program { static void Main(string[] args) { string[] istasyon = new string [16] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16" }; string[] alan = new string [16] { "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S" }; int[,] yük = new int [16,16] { {0, 3000, 2500, 2020, 2409, 300, 2901, 0, 2078, 2608, 3002, 2043, 2009, 2088, 2709, 3008}, {0, 0, 3009, 2098, 3003, 2908, 3000, 0 , 3909 ,2707 , 2096 , 4001 , 3609 ,0 ,2808 ,0 }, {0, 0 , 0 , 2708 , 2045 , 4900 , 4708 , 4900 , 5000 , 4708 , 3900 , 0 , 5009 , 6009 , 3800 , 0 }, {0 ,2000 , 0 , 0 ,5010 , 0 , 4808 , 5607 , 0 , 5006 , 4980 , 4606 , 5049 , 3907 , 2708 , 4000 }, {0 ,0 , 0 , 0 , 0 , 3002 , 4404 , 6708 ,3090 , 6003 , 0 ,3706 , 5908 , 3707 ,4607 , 4708 }, {0 , 0 , 0 , 0 , 0 , 0 , 3607 , 5001 , 0, 3606 , 4002 , 407 ,3045 , 0 , 0 , 3403 }, {0 , 0 , 500, 0, 0 , 0 , 0 , 3202 , 3009 , 3607 , 0 , 2045 , 2809 , 3908 , 4607, 3808 }, { 0, 0 , 0 , 0 ,0 ,0 , 0 , 0 , 4507 ,3402 , 0, 3440 , 4607 , 4707 , 2304 , 4607}, {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 3405, 7808 , 6504 , 5430 , 4302 , 3045 , 2304 }, {0 , 0 , 0 , 3404 , 0, 0 , 0 , 0 , 0 , 0 , 3404 , 5403 , 5505 , 0 , 4035 , 6045 }, {0 , 0, 0 , 0 , 0 , 0 , 0, 0 ,0 , 0 , 0 , 3405 , 0 , 4033 , 5403 , 0 }, {0 , 0 , 0 , 0, 0, 2807 , 0 , 0 , 0 , 0 , 0, 0, 4302 , 5064 , 3450 , 3202 }, {0 , 0 , 0 , 0 , 3506 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 3024 , 0 ,3205 }, {0 , 0 , 0 , 0 ,0 , 0 , 0 , 2034 , 0 , 0, 0 , 0 , 0 , 0 , 2304 , 2404 }, {0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1009 , 0 , 0 , 0 , 0 , 0 ,0 , 4305 }, {0 , 0, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1302 , 0 , 0 , 60, 0 , 0 , 0 } }; double[,] agirlik = new double [16,16] { { 0 , 1291 , 2582 , 3873 , 5164 , 6455 , 7746 , 9037 , 847, 1544.05, 2717.38 ,3964.54 ,5233 , 6510.33 ,7792.17, 9076.61 }, {1291 , 0 , 1291 , 2582 , 3873 , 5164 , 6455 ,7746 , 1544.05, 847, 1544.05 ,2717.38 ,3964.54 ,5233 , 6510.33, 7792.17 }, {2582 , 1291 , 0 , 1291 , 2582 , 3873 , 5164 , 6455 , 2717.38, 1544.05, 847 ,1544.05, 2717.38 ,3964.54 ,5233, 6510.33 }, {3873 , 2582 , 1291 , 0 , 1291 , 2582 , 3873 , 5164 , 3964.54 ,2717.38, 1544.05, 847 ,1544.05, 2717.38 ,3964.54, 5233 }, {5164 , 3873 , 2582, 1291 , 0 , 1291 , 2582 , 3873 , 5233 , 3964.54, 2717.38 ,1544.05 ,847 ,1544.05, 2717.38 ,3964.54 }, {6455 , 5164 , 3873 , 2582 , 1291 , 0 , 1291, 2582 , 6510.33 ,5233 , 3964.54 ,2717.38, 1544.05 ,847 ,1544.05, 2717.38 }, {7746 , 6455 , 5164 , 3873 ,2582 , 1291 , 0 , 1291 , 7792.17 ,6510.33, 5233 , 3964.54, 2717.38 ,1544.05, 847 ,1544.05 }, {9037, 7746 , 6455 , 5164 , 3873 , 2582 , 1291 , 0 , 9076.61, 7792.17 ,6510.33, 5233, 3964.54 ,2717.38 ,1544.05, 847 }, {847 , 1544.05, 2717.38, 3964.54 ,5233, 6510.33, 7792.17 ,9076.61 ,0,1291 , 2582 , 3873 , 5164 , 6455 , 7746 , 9037 }, {1544.05 , 847 ,1544.05, 2717.38 ,3964.54, 5233 , 6510.33, 7792.17, 1291 , 0 ,1291, 2582 , 3873 , 5164 , 6455 , 7746 }, {2717.38 , 1544.05, 847 ,1544.05, 2717.38, 3964.54 ,5233 , 6510.33 ,2582 , 1291 , 0 ,1291 , 2582 , 3873 , 5164 , 6455 }, {3964.54 , 2717.38, 1544.05, 847 ,1544.05, 2717.38 ,3964.54, 5233 , 3873 , 2582 , 1291 , 0 , 1291 , 2582 , 3873 , 5164 }, {5233 , 3964.54 ,2717.38 ,1544.05, 847 ,1544.05 ,2717.38, 3964.54 ,5164 , 3873 , 2582 , 1291 , 0 , 1291 , 2582 , 3873 }, {6510.33 , 5233 , 3964.54 ,2717.38, 1544.05 ,847, 1544.05 ,2717.38 ,6455 , 5164, 3873 , 2582 ,1291, 0 , 1291 , 2582 }, {7792.17 , 6510.33, 5233 , 3964.54, 2717.38, 1544.05, 847 ,1544.05 ,7746 , 6455 , 5164 , 3873 , 2582 , 1291 , 0 , 1291 }, {9076.61 , 7792.17 ,6510.33 ,5233 , 3964.54 ,2717.38, 1544.05 ,847, 9037 , 7746 , 6455 , 5164 ,3873 , 2582 , 1291 , 0 } }; int [] sıra = new int [16]; Random sayi = new Random(); for (int i = 0; i < 16; i++) { int randomyeni = sayi.Next(1, 17); if (sıra.Contains(randomyeni)) { i--; } else { sıra[i] = randomyeni; } Console.WriteLine(sıra[i].ToString()); int cost = Bu SIRAYLA OLUŞTURULMUŞ OLANLARI İKİ MATRİSTEN BULUP ÇARPACAK ÖRNEK 1-3-2-4.. COST = YUK13*AGIRLIK13 +YUK32*AGIRLIK32.. DAHA SONRA BUNU TABU LİST DİYE BİR LİSTEDE HAFIZAYA ALACAK. TEKRAR RASSAL SIRAYI SIRALICAK 1DEN 16ya KADAR 16 DAHİL. TEKRAR MALİYET HESAPLAYACAK. BU LİSTE HAFIZA KAPASİTESİ BİZE BAĞLI MESELA 20 OLSUN 21. GİRDİĞİNDE 1.SIRADAKİNİ SİLECEK. ÇÖZÜM OLARAK KISIT İSE EĞER MALİYET ÖNCEKİNDEN BÜYÜK İSE ÇÖZÜME ALMA. Console.ReadLine(); } } } }
-
Sabah up ı olsun.