...
 
Commits (2)
......@@ -6,6 +6,7 @@
#include <QCoreApplication>
#include <QMessageBox>
#include <QDebug>
#include "mainwindow.h"
GLPK::GLPK(Simulation* & simulacion)
{
......@@ -83,10 +84,14 @@ void GLPK::ejecutar(QProcess* process){
output = process->readAllStandardOutput();
if (output.contains("FOUND"))
if (output.contains("FOUND")) {
// ventana_expectativa();
Sleep(1000);
qInfo() << "GLPK MTAV_Empate Status: FOUND";
else
}
else {
qCritical() << "GLPK MTAV_Empate ERROR en la salida";
}
procesarSolucionEmpate(MTAV_empate_nombre);
}
......
......@@ -275,6 +275,25 @@ QString Simulation::generarReporte(QString ruta)
return fileName;
}
void Simulation::interpretarBloques(int* prefs, int maxima_pref, int fila) {
int acumulados[maxima_pref] = { 1 };
for (int k=1; k < maxima_pref; k++){
acumulados[k] = acumulados[k-1] + prefs[k-1];
}
QHash<int, QStringList> preferencias = this->getPreferencias();
for (int j=1; j < this->cantidad + 1; j++){
int pref = preferencias[fila].at(j).toInt();
if (pref > 1) {
preferencias[fila][j] = QString::number(acumulados[pref-1]);
}
}
this->setPreferencias(preferencias);
}
QString Simulation::validar()
{
QString error = QString("");
......@@ -313,7 +332,8 @@ QString Simulation::validar()
familias.append(familiaNombre);
bool viviendaSeleccionada[this->cantidad] = { 0 };
int preferenciasSeleccionadas[this->cantidad] = { 0 };
int maxima_pref = 0;
for (int j=1; j < this->cantidad + 1; j++){
QString viviendaPref = preferencias[i].at(j);
......@@ -324,30 +344,38 @@ QString Simulation::validar()
}
bool esNumero = false;
viviendaPref.toInt(&esNumero);
int preferencia = viviendaPref.toInt(&esNumero);
if (!esNumero){
if ((!esNumero) || (preferencia < 1)){
error = "La familia " + preferencias[i].at(0) + " tiene entre sus preferencias la preferencia: " + viviendaPref + ", la cual no es correcta. (Debe ser un número entre 1 y " + QString::number(this->cantidad) + ")";
return error;
}
if (!(preferenciasMapeoNumero.contains(viviendaPref))){
if (!(preferenciasMapeoNumero.contains(viviendaPref))){
error = "La familia " + preferencias[i].at(0) + " tiene entre sus preferencias la preferencia: " + viviendaPref + ", la cual no es correcta";
return error;
}
if (viviendaPref.toInt() > this->cantidad) {
if (preferencia > this->cantidad) {
error = "La familia " + preferencias[i].at(0) + " tiene entre sus preferencias la preferencia: " + viviendaPref + ", siendo que la preferencia mayor es: " + QString::number(this->cantidad);
return error;
}
if (viviendaSeleccionada[preferenciasMapeoNumero[viviendaPref]]){
error = "La familia " + preferencias[i].at(0) + ", tiene mas de una vez asignada la preferencia: " + viviendaPref;
return error;
if (preferencia > maxima_pref){
maxima_pref = preferencia;
}
viviendaSeleccionada[preferenciasMapeoNumero[viviendaPref]] = true;
preferenciasSeleccionadas[preferencia-1]++;
}
for (int k=0; k < maxima_pref -1; k++){
if (preferenciasSeleccionadas[k] == 0) {
error = QString("La familia " + familiaNombre + " ha omitido la preferencia %1").arg(k+1);
return error;
}
}
interpretarBloques(preferenciasSeleccionadas, maxima_pref, i);
}
}
return error;
......
......@@ -48,7 +48,7 @@ public:
QString generarReporte(QString ruta);
QString validar();
void guardar();
void interpretarBloques(int* prefs, int maxima_pref, int fila);
};
#endif // SIMULATION_H
......@@ -46,22 +46,15 @@ void SimulationResultWidget::abrirDialog(Simulation *simulacion)
QList<QStandardItem*> lista;
lista.append(new QStandardItem(QString("Res")));
/*************** TEST ************************
int suma = 0;
for (int i = 0; i < asignaciones.count(); i++){
int aux= QString(preferencias[i].at(asignaciones[i].toInt()+1)).toInt();
suma += aux;
}
lista.append(new QStandardItem(QString::number(suma)));
tablaModel->appendRow(lista);
**********************************************/
ui->tableView->setModel(tablaModel);
ui->tableView->setColumnWidth(0,210);
ui->tableView->setColumnWidth(1,100);
this->exec();
this->open();
showResults();
}
void SimulationResultWidget::on_btnExportarAPdf_clicked()
......@@ -86,3 +79,25 @@ void SimulationResultWidget::on_btnCerrar_clicked()
{
this->close();
}
void SimulationResultWidget::showResults() {
QHash<int, QString> asignaciones = this->simulacion->getAsignaciones();
QHash<int, QStringList> preferencias = this->simulacion->getPreferencias();
tablaModel->setRowCount(asignaciones.count());
for (int i = 0; i < asignaciones.count(); i++){
tablaModel->setItem(i,0, new QStandardItem(preferencias[i].at(0)));
QString vivienda = this->simulacion->getViviendasMapeo()[asignaciones[i].toInt()];
tablaModel->setItem(i,1, new QStandardItem(vivienda));
QString preferencia = preferencias[i].at(asignaciones[i].toInt() + 1);
tablaModel->setItem(i,2, new QStandardItem(preferencia));
ui->tableView->setModel(tablaModel);
Sleep(2000);
}
}
......@@ -6,6 +6,7 @@
#include "simulation.h"
#include <QStandardItemModel>
#include <QStandardItem>
#include <windows.h>
namespace Ui {
......@@ -24,6 +25,7 @@ private:
private slots:
void on_btnExportarAPdf_clicked();
void on_btnCerrar_clicked();
void showResults();
public:
explicit SimulationResultWidget(QWidget *parent = 0);
......