/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package testejavadesktop;
import java.awt.GridLayout;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DecimalFormat;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;
/**
*
* @author Administrator
*/
public class AjustesParametros {
private static double AvaliaAcertosMedia(double[] AcertosNota) {
double soma = 0;
for (int n = 0; n < 7; n++) {
soma += AcertosNota[n];
}
return soma*100.0 / 7;
}
public static void AjustaParametros(boolean CarregaImagensMemoria) {
//double[] Acertos = new double[7];
COutputDebug.OutTela=false;
double Avaliacao, MelhorAvaliacao;
MelhorAvaliacao=0;
int PASSO = 10;
int UltimoValor;
double intervalo, MelhorAvaliacaoGeral, MelhorAvaliacaoGeralAnterior;
int Valor, MelhorValor;
DecimalFormat df = new DecimalFormat("#,###.00");
TParamsDir ParamsDir=new TParamsDir();
WriteText log = new WriteText(ParamsDir.getDirBase()+DateUtils.nowCurto()+" log.txt");
CArquivosTeste ArquivosTeste = new CArquivosTeste(
ParamsDir.getDir("DiretorioSelecionadas"), CarregaImagensMemoria);
TParamsIni ParamsIni = new TParamsIni(ParamsDir.getDirBase()+"ParamsTP.ini");
TParamsIni ParamsSup = new TParamsIni(ParamsDir.getDirBase()+"ParamsTPSup.ini");
TParamsIni ParamsInf = new TParamsIni(ParamsDir.getDirBase()+"ParamsTPInf.ini");
//TParamsIni ParamsPasso = new TParamsIni("p:\\TioPatinhas\\ParamsTPPasso.ini");
MelhorAvaliacaoGeral = 1;
MelhorAvaliacaoGeralAnterior = 0;
int NumCiclos=1;
//repete a execução da otimização com todos os parâmetros enquanto houver
//melhora de uma execução para a outra
while ((MelhorAvaliacaoGeral - MelhorAvaliacaoGeralAnterior) > 0.001) {
MelhorAvaliacaoGeralAnterior = MelhorAvaliacaoGeral;
log.EscreveLinha("****************************************************************");
log.EscreveLinha(DateUtils.now());
log.EscreveLinha("Iniciando ciclo "+NumCiclos);
//PERCORRE TODOS OS PARÂMETROS
for (int k = 0; k < ParamsIni.ListaParametros.length; k++) {
String parametro=ParamsIni.ListaParametros[k];
MelhorValor = -1;
intervalo = ParamsSup.LeParametro(parametro) - ParamsInf.LeParametro(parametro);
log.EscreveLinha(DateUtils.now());
log.EscreveLinha(parametro);
log.Atualiza();
UltimoValor=-10000000;
boolean AchouMelhor=false;
//PERCORRE OS VALORES DO PARÂMETRO ATUAL
for (int n = 0; n < PASSO; n++) {
Valor = ParamsInf.LeParametro(parametro) + MathUtils.round(n * (intervalo * 1.0 / PASSO));
if (Valor==UltimoValor)
continue;
UltimoValor=Valor;
ParamsIni.EscreveParametro(parametro, Valor);
CResultadosTeste ResultadosTeste=new CResultadosTeste();
//StringMatrizConfusao MatrizConfusao=new StringMatrizConfusao();
CTestes.CalculaAcertos(ParamsIni, ArquivosTeste, false,
ResultadosTeste);
Avaliacao = ResultadosTeste.AcertoGeral();
if (Avaliacao > MelhorAvaliacao) {
MelhorAvaliacao = Avaliacao;
MelhorValor = Valor;
AchouMelhor=true;
}
log.EscreveLinha(Valor + ": " + df.format(Avaliacao) +
StrAcertos(ResultadosTeste.ProporcaoAcertos,
ResultadosTeste.AcertoGeral()));
log.Atualiza();
}
if (AchouMelhor)
{
ParamsIni.EscreveParametro(parametro, MelhorValor);
log.Escreve(ParamsIni.dump());
}
if (MelhorAvaliacao > MelhorAvaliacaoGeral) {
log.EscreveLinha("Melhora de "+df.format(MelhorAvaliacao-MelhorAvaliacaoGeral)+
"% na otimização da variável");
MelhorAvaliacaoGeral = MelhorAvaliacao;
}
log.EscreveLinha("Melhor avaliação geral atual: "+df.format(MelhorAvaliacaoGeral)+"%");
log.EscreveLinha("");
}
log.EscreveLinha("Melhor no ciclo: "+df.format(MelhorAvaliacaoGeral-MelhorAvaliacaoGeralAnterior)+"%");
log.EscreveLinha("FIM DO CICLO ************************************************");
log.EscreveLinha("");
NumCiclos++;
}
log.Fecha();
}
private static String StrAcertos(double[] AcertosNota, double AcertoGeral) {
String retorno = "";
DecimalFormat df = new DecimalFormat("#,##0.00");
for (int n = 0; n < 7; n++) {
retorno += ",\t" + CNota.NotaPorIndice(n) + ": " +
df.format(AcertosNota[n] * 100.0)+"%";
}
retorno +="\tAcerto geral: "+df.format(AcertoGeral)+"%";
return retorno;
}
}
class WriteText {
private PrintWriter out;
private JPanel cp;
private JTextArea ta;
public WriteText(String NomeArq) {
try {
cp = new JPanel(new GridLayout(0, 1));
ta = new JTextArea();
cp.add(ta);
JFrame fr = new JFrame("Tio Patinhas Debug");
fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fr.setContentPane(cp);
fr.add(ta);
fr.pack();
fr.setLocationRelativeTo(null);
fr.setVisible(true);
FileWriter outFile = new FileWriter(NomeArq);
out = new PrintWriter(outFile);
} catch (IOException e) {
e.printStackTrace();
}
}
public void Escreve(String str) {
out.print(str);
}
public void EscreveLinha(String str) {
out.print(str+"\n");
ta.append(str);
}
public void Fecha() {
out.close();
}
public void Atualiza() {
out.flush();
}
}