main.cpp 3.44 KB
   1
   2
   3
   4
   5
   6
   7
   8
   9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  23
  24
  25
  26
  27
  28
  29
  30
  31
  32
  33
  34
  35
  36
  37
  38
  39
  40
  41
  42
  43
  44
  45
  46
  47
  48
  49
  50
  51
  52
  53
  54
  55
  56
  57
  58
  59
  60
  61
  62
  63
  64
  65
  66
  67
  68
  69
  70
  71
  72
  73
  74
  75
  76
  77
  78
  79
  80
  81
  82
  83
  84
  85
  86
  87
  88
  89
  90
  91
  92
  93
  94
  95
  96
  97
  98
  99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
//
// 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;
}