ziph
22-10-2006, 04:35
ciao a tutti,
vi pongo un problema che spero sia di facile soluzione, (sto programmanda in c++ da 1 settimana) ,
sto cercando di implementare una libreria per risolvere il TSP su grafo tramite Ant Colony Optimization in c++, praticamente le formiche si muovono sul grafo e trovano la soluzione migliore aggiungendo "feromone" sui lati del percorso migliore (seguiranno VRP,vehicle routing problem, multiplo con capacità e time window e il PDP,pickup and delivery problem, è per la tesi!)
il problema è questo:
header classe formica:
class AntTSP {
public:
long int *tour;
char *visited;
long int tour_length;
long int n; //numero di passi nel tour
(nel tsp corrisponde al num città)
//puntatori alle variabili del problema AcoTSP utilizzate
static double **total;
static double q_0;
.....
.....vari metodi..
implementazione
#include "AntTSP.h"
AntTSP::AntTSP()
{
}
void AntTSP::init(long int num)
{
n = num;
tour = new long int[n+1];
visited = new char [n];
}
AntTSP::~AntTSP()
{
delete [] tour;
delete [] visited;
}
..metodi..
i membri static, che dovrebbero essere comuni a tutta la classe, vengono passati in un metodo di inizializzazione del problema, che ho chiamato AcoTSP, dopo aver creato un array di formiche, cioè riassumendo il metodo:
void AcoTSP::initialize(const char *tsp_file_name)
{
set_default_parameters();
TSP::initialize( tsp_file_name, nn); //viene inizializzato col metodo di TSP
//alloca la colonia
ant = new AntTSP[n_ants];
for (int i = 0 ; i < n_ants ; i++ )
{
ant[i].init(n);
}
//passo i parametri del problema alla colonia
AntTSP::total; //matrice del feromone
AntTSP::q_0=q_0;
...
il distruttore di AcoTSP fa il delete di ant.
Ora alla fine di tutta questa descrizione il problema è che in fase di link di un programma di prova che chiama i metodi di AcoTSP c'è un "link error undefined reference to Ant::total, Ant::q_0 ecc.." cioè di tutti i membri statici, ripetuti varie volte. Nei metodi di AcoTSP vengono chiamati metodi che lavorano sulle formiche che a loro volta utilizzano in lettura i membri statici della loro classe.
Qualcuno mi può aiutare? Vi ringrazio in anticipo.
ciaoo
vi pongo un problema che spero sia di facile soluzione, (sto programmanda in c++ da 1 settimana) ,
sto cercando di implementare una libreria per risolvere il TSP su grafo tramite Ant Colony Optimization in c++, praticamente le formiche si muovono sul grafo e trovano la soluzione migliore aggiungendo "feromone" sui lati del percorso migliore (seguiranno VRP,vehicle routing problem, multiplo con capacità e time window e il PDP,pickup and delivery problem, è per la tesi!)
il problema è questo:
header classe formica:
class AntTSP {
public:
long int *tour;
char *visited;
long int tour_length;
long int n; //numero di passi nel tour
(nel tsp corrisponde al num città)
//puntatori alle variabili del problema AcoTSP utilizzate
static double **total;
static double q_0;
.....
.....vari metodi..
implementazione
#include "AntTSP.h"
AntTSP::AntTSP()
{
}
void AntTSP::init(long int num)
{
n = num;
tour = new long int[n+1];
visited = new char [n];
}
AntTSP::~AntTSP()
{
delete [] tour;
delete [] visited;
}
..metodi..
i membri static, che dovrebbero essere comuni a tutta la classe, vengono passati in un metodo di inizializzazione del problema, che ho chiamato AcoTSP, dopo aver creato un array di formiche, cioè riassumendo il metodo:
void AcoTSP::initialize(const char *tsp_file_name)
{
set_default_parameters();
TSP::initialize( tsp_file_name, nn); //viene inizializzato col metodo di TSP
//alloca la colonia
ant = new AntTSP[n_ants];
for (int i = 0 ; i < n_ants ; i++ )
{
ant[i].init(n);
}
//passo i parametri del problema alla colonia
AntTSP::total; //matrice del feromone
AntTSP::q_0=q_0;
...
il distruttore di AcoTSP fa il delete di ant.
Ora alla fine di tutta questa descrizione il problema è che in fase di link di un programma di prova che chiama i metodi di AcoTSP c'è un "link error undefined reference to Ant::total, Ant::q_0 ecc.." cioè di tutti i membri statici, ripetuti varie volte. Nei metodi di AcoTSP vengono chiamati metodi che lavorano sulle formiche che a loro volta utilizzano in lettura i membri statici della loro classe.
Qualcuno mi può aiutare? Vi ringrazio in anticipo.
ciaoo