//
// main.cpp
// Simplex
//
// Created by Lettiery on 02/05/16.
// Copyright © 2016 Lettiery. All rights reserved.
//
#include <iostream>
#include <vector>
#include "Simplex.h"
using namespace std;
void imprimirModelo(double model, int n_variaveis, int n_rest, vector<vector<double> >);
vector<vector<double> > lerModelo(int * n_restricoes, int * n_variaveis, double * model);
vector<vector<double> > criarModelo(int * n_restricoes, int * n_variaveis, double * model);
int main(int argc, const char * argv[]) {
int n_restricoes, n_variaveis;
double model;
//vector<vector<double> > tablo = lerModelo(&n_restricoes, &n_variaveis, &model);
vector<vector<double> > tablo = criarModelo(&n_restricoes, &n_variaveis, &model);
imprimirModelo(model, n_variaveis, n_restricoes, tablo);
Simplex alg (model , n_variaveis, n_restricoes, tablo);
alg.imprimirTablo();
alg.primal();
return 0;
}
vector<vector<double> > criarModelo(int * n_restricoes, int * n_variaveis, double * model){
*model = 1.0;// maximizar
*n_variaveis = 3;
*n_restricoes = 2;
vector<vector<double> > tablo((*n_restricoes) + 1, vector<double>( (*n_variaveis) + (*n_restricoes) + 1 , 0));
tablo[0][0] = 0;// inicia z = 0
tablo[0][1] = 6; tablo[0][2] = 1; tablo[0][3] = 3;//6x1 + x2 + 3x3
tablo[1][1] = 3; tablo[1][2] = 1; tablo[1][3] = 0; tablo[1][0] = 15;// 3x1 + 1x2+ 0x2 <= 2
tablo[2][1] = 2; tablo[2][2] = 2; tablo[2][3] = 2;tablo[2][0] = 20;// 0x1 + 2x2 <= 4
for(int c = 1; c < tablo[0].size();c++){
tablo[0][c] *= *model;
}
return tablo;
}
vector<vector<double> > lerModelo(int * n_restricoes, int * n_variaveis, double * model){
char max;
printf("Programação Linear\n\n");
printf("MAXIMIZE (Y/N): "); scanf("%c", &max);
printf("Quantidade do variáveis da FO: "); scanf("%d", n_variaveis);
printf("Quantidade de restrições: "); scanf("%d", n_restricoes);
vector<vector<double> > tablo((*n_restricoes) + 1, vector<double>( (*n_variaveis) + (*n_restricoes) + 1 , 0));
if (max == 'Y' || max=='y'){
*model = 1.0;
}else{
*model = -1.0;
}
tablo[0][0] = 0;// inicia z = 0
printf("Valores da FO:\n");
for (int c = 1; c <= *n_variaveis; c++) {// lendo FO
printf("X%d: ", c);
cin >> tablo[0][c];
tablo[0][c] = *model;// zj-cj
}
for (int l = 1; l <= *n_restricoes; l++) {// lendo restricoes
printf("\nRestrição %d:\n", l);
for (int c = 1; c <= *n_variaveis; c++) {
printf("X%d: ", c);
cin >> tablo[l][c];
}
printf("Restrição %d <= ", l);
cin >> tablo[l][0];
}
return tablo;
}
void imprimirModelo(double model, int n_variaveis, int n_restricoes, vector<vector<double> > tablo){
cout << "Modelo\n";
if(model == 1.0){
cout << "Max Z = ";
}else{
cout << "Min Z = ";
}
for(int c = 1; c <= n_variaveis; c++){
printf("%0.fX%d", tablo[0][c] * model , c);
if(c < n_variaveis){
cout << " + ";
}
}
cout << endl;
for(int l = 1; l <= n_restricoes; l++){
for(int c = 1; c <= n_variaveis; c++){
printf("%0.fX%d", tablo[l][c] , c);
if(c < n_variaveis){
cout << " + ";
}
}
printf(" <= %0.f\n", tablo[l][0] );
}
cout << endl;
}