Fórum Alguem sabe onde posso achar o Problema do Caixeiro Viajante #299718
17/10/2005
0
Desde já agradeço
Titanius
Curtir tópico
+ 0Posts
17/10/2005
Massuda
Gostei + 0
17/10/2005
Titanius
Olá massuda, procurei sim, e achei alguns, porém nao sei se eles usam somente o Busca Local, na verdade eu queria mesmo, era so o algotimo da Busca Local do PCV...
Gostei + 0
17/10/2005
Massuda
Gostei + 0
17/10/2005
Titanius
const
Max = 50;
var
Form1: TForm1;
Aux, cPtn: string;
k, Sort: integer;
Pontos: array[0..Max, 0..1] of integer;
Custos: array[0..Max, 0..Max] of Real;
Seq: array[0..Max] of integer;
Visitar: array[0..Max] of integer;
Reg: array[0..Max] of integer;
implementation
{$R *.DFM}
function TForm1.CalculaCusto: Real;
var
Soma: Real;
x: integer;
begin
Soma := 0;
for x := 0 to Max - 1 do
Soma := Soma + Custos[Visitar[x], Visitar[x + 1]];
Soma := Soma + Custos[Visitar[Max], Visitar[0]];
Result := Soma;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i, j, Valor: integer;
MenorCustoFinal: Real;
begin
Randomize;
// lendo as coordenadas
ListBox1.Items.Clear;
ListBox2.Items.Clear;
for i := 0 to Max - 1 do
begin
Aux := IntToStr(Random(200)); //InputBox(´Mensagem´,´coordenada x´,´´);
Pontos[i, 0] := StrToInt(Aux);
cPtn := Aux + ´,´;
Aux := IntToStr(Random(200)); //InputBox(´Mensagem´,´Coordenada y´,´´);
Pontos[i, 1] := StrToInt(Aux);
cPtn := cPtn + Aux;
ListBox1.Items.Add(cPtn);
end;
//calculando a matriz de custos
for i := 0 to Max - 1 do
begin
for j := 0 to Max - 1 do
begin
Custos[i, 1] := Sqrt(Sqr(Pontos[i, 0] - Pontos[j, 0]) + sqr(Pontos[i, 1] - Pontos[j, 1]));
end;
end;
Custos[0, 0] := i / 3;
// selecao aleatoria dos pontos a serem visitados
for i := 0 to Max - 1 do
Seq[i] := i;
k := MAx; // ponteiro
for i := 0 to Max - 1 do
begin
// Sort := Random(k); // sorteia uma cidade aleatoria
Sort := 0; // sorteia uma cidade aleatoria
Visitar[i] := Seq[Sort];
Seq[Sort] := Seq[k - 1];
k := k - 1;
end;
// matriz de custos
for i := 0 to Max - 1 do
begin
for j := 0 to Max - 1 do
begin
custos[i, j] := Sort;
end;
end;
for i := 0 to Max - 1 do reg[i] := i;
k := Max;
for i := 0 to MAx - 1 do
begin
sort := random(k);
visitar[i] := seq[sort];
// mostranado seq inicial.
ListBox2.Items.Add(IntToStr(visitar[1]));
Seq[sort] := seq[k - 1];
k := k - 1;
end;
// iniciando o proc. busca local.
MenorCustoFinal := calculacusto;
// mostrando o custo inicial na tela.
Label5.Caption := FloatToStr(menorcustofinal);
end;
Ou seja, ele deveria me retornar o melhor caminho, o problema é que sempre me retorna zero... tah faltando algo aí, e não sei o que é, por isso queria ver um pronto para ver o que esta faltando..
Obrigado desde Já
Gostei + 0
17/10/2005
Motta
Obs :
O problema do caixeiro viajante tem uma solução baseada na emulação do comportamento das formigas , busque na web e deve encontrar.
Gostei + 0
17/10/2005
Titanius
Gostei + 0
17/10/2005
Sandra
Veja esta página que encontrei: [url=http://www.codigolivre.com.br/abrefontes.php?codid=771&catid=166&lingid=10]PCV - Problema do Caixeiro Viajante[/url].
Espero que ajude!
Gostei + 0
17/10/2005
Titanius
Obrigado
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)