folder Tahribat.com Forumları
linefolder C#, Asp.Net, .Net Core
linefolder Tabu Arama Algoritması C#



Tabu Arama Algoritması C#

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Amatör Üye
    masteryoda
    masteryoda's avatar
    Kayıt Tarihi: 15/Mayıs/2012
    Erkek

    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();
                }
            }
        }
    }
    
    



  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Amatör Üye
    masteryoda
    masteryoda's avatar
    Kayıt Tarihi: 15/Mayıs/2012
    Erkek

    Sabah up ı olsun.

Toplam Hit: 1729 Toplam Mesaj: 2
c# algoritma tabu