7#define BUFFER_SIZE 1024
50 indicador.Add({
"Resultado",
"Resultado do algoritmo, interpretado conforme o algoritmo (sucesso/insucesso, custo, qualidade, valor, etc.).", 0 });
51 indicador.Add({
"Tempo(ms)",
"Tempo em milisegundos da execução (medida de esforço computacional).", 1 });
52 indicador.Add({
"Iterações",
"Iterações do algoritmo, intrepretadas conforme o algoritmo (medida de esforço independente do hardware).", 2 });
63 parametro.Add({
"Seed",1,1,1000000,
"Semente aleatória para inicializar a sequência de números pseudo-aleatórios.",
NULL });
65 parametro.Add({
"Tempo",10,1,3600,
"Limnite de tempo em segundos. ",
NULL });
67 parametro.Add({
"Iterações",0,0,1000000000,
"Limite de número de iterações (0 não há limite). ",
NULL });
90 printf(
"\nTProcura::Debug() método não redefinido.");
119____________________________________________________________________\n\
120| 1 - Inicializar | 2 - Explorar | 3 - Parâmetros | 4 - Solução |\n\
121| 5 - Indicadores | 6 - Executar | 7 - Configurações | 8 - Teste |");
150 default:
printf(
"\nOpção não definida.");
break;
214 int opcao = 0, valor;
236 if (valor !=
NAO_LIDO || valor == 0)
335 for (
int i =
A;
i <=
B;
i +=
C)
349 printf(
"\nSintaxe (apenas inteiros, sem espaços):\n\
350 A ou A,B,C - único valor ou enumeração\n\
351 A:B ou A:B:C - intervalo A a B, ou com passo C\n\
374 id / -id - Seleciona configuração como atual ou apaga 'id'\n\
375 Pk=<conj.> - Varia Pk na configuração atual (gera N configurações)\n\
376 Pk=<conj.> x Pw=<conj.> - produto externo de Pk e Pw (gera NxM configurações)\n\
377Sintaxe de <conj.> (apenas inteiros, sem espaços):\n\
378 A ou A,B,C - único valor ou enumeração\n\
379 A:B ou A:B:C - intervalo A a B, ou com passo C\n\
424 if (
valores.Last().Count() == 2) {
427 int valor =
valores.Last().Last();
432 if (
valores.Last().Count() <= 2)
437 else if (*
pt ==
'x') {
465 for (
int i = 1;
i <
lista.Count();
i++)
492 printf(
"\nParâmetros comuns:");
547 printf(
"Não resolvido. ");
549 printf(
"Tempo excedido. ");
551 printf(
"Memória esgotada. ");
553 printf(
"Instância Impossível! (se algoritmo completo) ");
570 const unsigned char bom[] = { 0xEF,0xBB,0xBF };
578 printf(
"\nErro ao gravar ficheiro %s.",
str);
618 for (
int i = 2;
i <
argc;
i++) {
658 "Uso: %s <instâncias> [opções]\n"
659 " <instâncias> Conjunto de IDs: A | A,B,C | A:B[:C]\n"
661 " -R <ficheiro> Nome do CSV de resultados (omissão: resultados.csv)\n"
662 " -F <prefixo> Prefixo dos ficheiros de instância (omissão: instancia_)\n"
663 " -I <ind> Lista de indicadores (e.g. 2,1,3)\n"
664 " -S Mostrar soluções durante a execução\n"
666 " -P <expr> Parâmetros (e.g. P1=1:3 x P2=0:2) - último campo\n"
667 "Exemplo: %s 1:5 -R out -F fich_ -I 3,1,4,2 -P P1=1:5 x P6=1,2 \n"
668 " Executar sem argumentos entra em modo interativo, para explorar todos os parametros e indicadores\n",
672 printf(
"\nLista de parâmetros:");
674 printf(
"\n\nLista de indicadores:");
724 for (
int i = 0;
i <
total.Count();
i++) {
741 total[
res.configuracao].instancia++;
742 printf(
"\n%3d |%3d |",
res.instancia,
res.configuracao + 1);
757 for (
int i = 0;
i <
total.Count();
i++) {
821 printf(
"\nTorneio (#instâncias melhores):");
823 for (
int i = 0;
i <
pontos.Count();
i++) {
839 if (
res.configuracao == configuracao)
883 printf(
" Tempo excedido.");
885 printf(
" Memória esgotada.");
892 for (
auto&
x : solucao)
920 printf(
"\nID atual: %d Intervalo: [%d–%d] ",
923 printf(
"\nNovo ID (ENTER mantém) ou novo prefixo (texto): ");
@ indResultado
resultado do algoritmo
@ indIteracoes
número de iterações consumidas
@ indTempo
tempo em milisegundos consumidos
@ detalhe
Debug detalhada sobre estados e decisões.
@ nada
Sem informações de debug.
@ seed
Semente aleatória para inicializar a sequência de números pseudo-aleatórios.
@ nivelDebug
Nível de debug, de reduzido a completo.
@ limiteTempo
Tempo limite em segundos.
virtual void MostrarSolucao()
definir para visualizar a solução
static bool memoriaEsgotada
Flag indicando problemas de memória esgotada.
virtual int ExecutaAlgoritmo()
Executa o algoritmo com os parametros atuais.
static int Dominio(int &variavel, int min=INT_MIN, int max=INT_MAX)
Limita o domínio de um parâmetro inteiro.
static char * NovoTexto(const char *prompt)
virtual void Inicializar(void)
Coloca o objecto no estado inicial da procura.
static TVector< TVector< int > > configuracoes
Conjuntos de configurações para teste empírico.
static int resultado
Resultado retornado pelo algoritmo na última execução.
void BarraTorneio(bool nomes)
Mostra a barra de progresso ou nomes do torneio.
void MostrarTorneio(TVector< TVector< int > > &torneio, bool jogo=false)
Mostra os resultados do torneio.
void MostrarConfiguracoes(int detalhe, int atual=-1)
Mostra as configurações disponíveis.
virtual int Indicador(int id)
Retorna um indicador, após a execução do algoritmo.
TVector< TResultado > ExtrairConfiguracao(TVector< TResultado > &resultados, int configuracao)
Extrai resultados de uma determinada configuração.
static int tempo
tempo consumido na última execução.
static int iteracoes
Número total de iterações realizadas na última execução.
virtual void TesteManual(const char *nome)
Inicializa a interação com o utilizador.
static char ficheiroInstancia[256]
nome do ficheiro de uma instância - editado pelo utilizador (utilizar como prefixo, concatenando com ID...
int NovaConfiguracao(TVector< int > ¶metros)
Adiciona uma nova configuração se ainda não existir.
void InserirConfiguracoes(char *str, TVector< int > &base)
Insere configurações a partir de uma string.
TVector< int > SolicitaInstancias()
Solicita ao utilizador uma lista de instâncias.
virtual void ResetParametros()
Inicializa os parametros, indicadores e instâncias.
void MostraParametros(int detalhe=1, TVector< int > *idParametros=NULL)
Mostra os parâmetros atuais.
virtual bool Parar(void)
Verifica se a procura deve ser interrompida.
virtual void ExecucaoTerminada(clock_t inicio)
Chamar após a execução do algoritmo. Grava o tempo consumido.
void MostraRelatorio(TVector< TResultado > &resultados, bool ultimo=false)
Mostra um relatório dos resultados.
bool EditarIndicadores()
Permite ao utilizador editar os indicadores a utilizar.
TVector< int > ExtraiLista(char *str)
Extrai uma lista de inteiros a partir de uma string.
virtual TVector< int > CodificarSolucao()
retorna um vetor de inteiros com a codifciação da solução (esta codificação será adicionada aos indicadores,...
virtual void Debug(void)
Mostra o estado no ecrã, para debug.
static int NovoValor(const char *prompt)
void MostraIndicadores()
Mostra os indicadores definidos.
static TVector< TIndicador > indicador
Indicadores que podem ser calculados após a execução, quer com informação da instãncia, quer com resultado da ...
virtual void main(int argc, char *argv[], const char *nome)
Inicializa a interação com o utilizador.
static clock_t instanteFinal
Instante final (deadline) da corrida atual.
void EditarParametros()
Permite ao utilizador editar os parâmetros.
int Registo(TResultado &resultado, int id)
Procura um registo com determinado id.
int MelhorResultado(TResultado base, TResultado alternativa)
Compara dois resultados para determinar o melhor.
virtual void Explorar()
definir para explorar manualmente os dados (não definido em TProcura, apenas em TProcuraConstrutiva)
void RelatorioCSV(TVector< TResultado > &resultados, FILE *f)
Gera um relatório CSV com os resultados.
void CalculaTorneio(TVector< TResultado > &resultados)
Calcula o torneio entre várias configurações.
void ConfiguracaoAtual(TVector< int > ¶metros, int operacao)
Grava ou lê a configuração atual.
static TVector< int > indAtivo
static TParametro instancia
ID da instância atual, a ser utilizado em SolucaoVazia().
void InserirRegisto(TVector< TResultado > &resultados, int inst, int conf)
Insere um novo registo de resultados.
virtual void LimparEstatisticas(clock_t &inicio)
Chapar antes da execução do algoritmo. Limpa valores estatísticos, e fixa o instante limite de tempo para...
static TVector< TParametro > parametro
Parâmetros a serem utilizados na configuração atual.
void AjudaUtilizacao(const char *programa)
Mostra ajuda de utilização do programa.
void EditarConfiguracoes()
Permite ao utilizador editar as configurações.
void SolicitaInstancia()
Solicita ao utilizador o ID da instância a utilizar, permitindo alterar também o prefixo do ficheiro.
virtual void TesteEmpirico(TVector< int > instancias, bool mostrarSolucoes=true, char *ficheiro=NULL)
Executa testes empíricos, em todas as configurações guardadas, nas instâncias selecionadas.
TVector< Item > & Remove(Item const &i)
Remove todas as ocorrências de um dado elemento.
TVector< Item > & Add(Item a)
TVector< Item > & Delete(int i)
Remove o elemento na posição i deslocando os seguintes.
void srand(unsigned int seed, int seq)
Inicializa a semente da geração pseudo-aleatória.
Estrutura para registo de um parâmetro.
int valor
valor do parametro
int max
valor máximo que o parametro pode tomar
int min
valor mínimo que o parametro pode tomar