PDA

View Full Version : سوال: سورس کد کلونی مورچگان



csharpdoost
جمعه 15 مهر 1401, 21:32 عصر
دوستان سلام. کسی از دوستان سورس کد از روش پیاده سازی کلونی مورچگان یا سورس کدی از هز نوع الگوریتم های پیشرفته دیگه داره؟
ممنون میشم کسی که سورس پیاده سازی این الگوریتم ها رو به زبا سی شارپ داره اینجا قرار بده.
توی اینترنت که هرچی گشتم سورس کدی پیدا نکردم

یونس ابراهیمی
جمعه 28 بهمن 1401, 12:02 عصر
using System;using System.Collections.Generic;
using System.Linq;


namespace AntColony
{
class Ant
{
private int _numCities;
private int[][] _distances;
private int[] _path;


public Ant(int numCities, int[][] distances)
{
_numCities = numCities;
_distances = distances;
_path = new int[_numCities];
}


public int[] FindPath(int startCity)
{
// Initialize ant's path
for (int i = 0; i < _numCities; i++)
{
_path[i] = -1;
}
_path[0] = startCity;


// Traverse the cities
for (int i = 1; i < _numCities; i++)
{
int nextCity = SelectNextCity(_path, i);
_path[i] = nextCity;
}


return _path;
}


private int SelectNextCity(int[] path, int currentIndex)
{
double[] probabilities = new double[_numCities];
double sum = 0;


// Calculate the probabilities for each city
for (int i = 0; i < _numCities; i++)
{
if (path.Contains(i))
{
probabilities[i] = 0;
}
else
{
double pheromoneLevel = Math.Pow(1.0 / _distances[path[currentIndex - 1]][i], 2);
probabilities[i] = pheromoneLevel;
sum += pheromoneLevel;
}
}


// Select the next city based on the probabilities
double rnd = new Random().NextDouble() * sum;
sum = 0;
for (int i = 0; i < _numCities; i++)
{
if (!path.Contains(i))
{
sum += probabilities[i];
if (sum >= rnd)
{
return i;
}
}
}


// If no city was selected, select a random one
return Enumerable.Range(0, _numCities).Where(i => !path.Contains(i)).First();
}
}


class AntColony
{
private int _numAnts;
private int _numCities;
private int[][] _distances;
private double[][] _pheromones;
private int[] _bestPath;
private int _bestPathLength;


public AntColony(int numAnts, int numCities, int[][] distances)
{
_numAnts = numAnts;
_numCities = numCities;
_distances = distances;


// Create the ant population
_ants = new Ant[_numAnts];
for (int i = 0; i < _numAnts; i++)
{
_ants[i] = new Ant(_numCities);
}


// Create the pheromone matrix
_pheromones = new double[_numCities][];
for (int i = 0; i < _numCities; i++)
{
_pheromones[i] = new double[_numCities];
}


// Initialize the pheromone matrix with some small values
for (int i = 0; i < _numCities; i++)
{
for (int j = 0; j < _numCities; j++)
{
_pheromones[i][j] = 0.01;
}
}


// Initialize the best tour and its length
_bestTour = new int[_numCities];
_bestTourLength = double.MaxValue;
}
}
}