program oddface_nn1;
uses {$IFDEF UNIX} {$IFDEF UseCThreads}
  cthreads, {$ENDIF} {$ENDIF}
  Classes,
  openssl,
  uoddface_nn1,
  utipos_xcf,
  uoddface_roscon_cfg,
  useriestemporales,
  uConstantesSimSEE,
  matreal,
  uauxiliares,
  SysUtils;

var
  idEjecutor: string;
  idProblema: integer;
  idNodo: integer;
  problema: TEntrenarRedNeuronal_Problema;
  archi: string;
  nidIndividuo: integer;

begin
  {
  Parámetros:
  1: idEjecutor
  2: idProblema
  3: idNodo  (si es negativo crea un cerebro y lo evalúa, si le pongo -1 me trae el mejor,
              si no trae el individuo con nid -idNodo, si justo el mejor era el 1... mala suerte)
  }
  SetLength(TrueBoolStrs, 1);
  SetLength(FalseBoolStrs, 1);
  TrueBoolStrs[0] := '1';//define el 1 como true
  FalseBoolStrs[0] := '0';//define el 0 como false

  setSeparadoresGlobales; //define los separadores de decimales, fechas, etc

  if ParamCount < 2 then//se deben pasar por lo menos 2 parametros al programa
  begin
    writeln('Debe pasar por lo menos dos parametros para identificacion del Ejecutor y el Problema'
      );
    exit;
  end;
  idEjecutor := ParamStr(1);//nid del resolvedor del problema
  idProblema := StrToInt(ParamStr(2));//nid del problema a resolver

  if ParamCount < 3 then
    idNodo := 0 //el cluster
  else
    idNodo := StrToInt(ParamStr(3));
  //se crea el directorio donde se descarga la serie de datos asociada al problema
  tmp_rundir := CrearDirectorioTemporal(getDefault_tmp_base, idEjecutor);

  if tmp_rundir <> '' then
    limpiarCarpeta(tmp_rundir, '*.*');//se vacia la carpeta

  writeln('Cambiando el directorio a : ', tmp_rundir);
  chdir(tmp_rundir);

  problema := TEntrenarRedNeuronal_Problema.CreateFromDB(
    dbcon_rosx, idProblema, StrToInt(idEjecutor), tmp_rundir);
  if problema = nil then
    raise Exception.Create('No fue posible crear el problema.');

  if idNodo >= 0 then
  begin
    system.randomize;
    problema.Explorar;
  end
  else
  begin
    nidIndividuo:= -1 * idNodo;
    archi:= 'cerebro_nid_' + IntToStr( nidIndividuo) + '.xlt';
    problema.WriteIndividuo( nidIndividuo , archi );
    Writeln('Cerebro guardado: '+ archi);
    ReadLn;
  end;

end.
