Beispiel #1
0
        public void CalculateWeights(BoltzmannMachine logic)
        {
            for (int sourceTour = 0; sourceTour < NUM_CITIES; sourceTour++)
            {
                for (int sourceCity = 0; sourceCity < NUM_CITIES; sourceCity++)
                {
                    int sourceIndex = sourceTour * NUM_CITIES + sourceCity;
                    for (int targetTour = 0; targetTour < NUM_CITIES; targetTour++)
                    {
                        for (int targetCity = 0; targetCity < NUM_CITIES; targetCity++)
                        {
                            int targetIndex = targetTour * NUM_CITIES + targetCity;
                            double weight = 0;

                            if (sourceIndex != targetIndex)
                            {
                                int predTargetTour = (targetTour == 0 ? NUM_CITIES - 1 : targetTour - 1);
                                int succTargetTour = (targetTour == NUM_CITIES - 1 ? 0 : targetTour + 1);
                                if ((sourceTour == targetTour) || (sourceCity == targetCity))
                                {
                                    weight = -gamma;
                                }
                                else if ((sourceTour == predTargetTour) || (sourceTour == succTargetTour))
                                {
                                    weight = -distance[sourceCity][targetCity];
                                }
                            }
                            logic.SetWeight(sourceIndex, targetIndex, weight);
                        }
                    }
                    logic.Threshold[sourceIndex] = -gamma / 2;
                }
            }
        }
Beispiel #2
0
        public void run()
        {
            var boltz = new BoltzmannMachine(NEURON_COUNT);

            CreateCities();
            CalculateWeights(boltz);

            boltz.Temperature = 100;
            do
            {
                boltz.EstablishEquilibrium();
                Console.WriteLine(boltz.Temperature + " : " + DisplayTour(boltz.CurrentState));
                boltz.DecreaseTemperature(0.99);
            } while (!IsValidTour(boltz.CurrentState));

            Console.WriteLine("Final Length: " + LengthOfTour(boltz.CurrentState));
        }