示例#1
0
    private static void gerarProblemaLP()
    {

      Console.WriteLine("Quantidade de variaveis: ");
      int qtdVariaveis = int.Parse(Console.ReadLine());

      Console.WriteLine("Quantidade de restricoes: ");
      int qtdRestricoes = int.Parse(Console.ReadLine());

      Console.WriteLine("Densidade: ");
      int densidade = int.Parse(Console.ReadLine());


      GeradorLP gerador = new GeradorLP(qtdVariaveis, qtdRestricoes, densidade);
      FObjetivo funcao = gerador.GerarProblemaLP();

      Console.WriteLine();
      //funcao.MostrarFObjetivo();

      TranscritorMPS transcritor = new TranscritorMPS(funcao);
      string buffer = transcritor.TranscreverProblema();

      File.WriteAllText(Path.Combine(DIRETORIO_NETLIB, funcao.Nome + ".mps"), buffer);

    }
示例#2
0
        public void Otimizar(FObjetivo funcao, Extremo extremo = Extremo.Minimizar)
        {
            Console.WriteLine();
            Console.WriteLine("Quantidade variaveis: {0} Quantidade restricoes: {1}", funcao.Variaveis.Count, funcao.Restricoes.Count);
            Console.WriteLine();
            funcao.Extremo = extremo;

            if (!funcao.Normalizado)
            {
                _swNormalizacao = Stopwatch.StartNew();
                funcao.normalizar();
                _quadro = new Quadro(funcao);
                _swNormalizacao.Stop();
            }

            _qtdIteracoes = 1;
            _historico.Clear();

            //mostrar quadro apos a troca
            //Console.WriteLine(_quadro.ToString());

            _statusSimplex = StatusSimplex.PrimeiraEtapa;

            _swOtimizacao    = Stopwatch.StartNew();
            _swtempoIteracao = Stopwatch.StartNew();

            while (_statusSimplex != StatusSimplex.SolucaoIlimitada &&
                   _statusSimplex != StatusSimplex.SolucaoOtima &&
                   _statusSimplex != StatusSimplex.SolucaoImpossivel)
            {
                _historico.Push(_statusSimplex);

                switch (_statusSimplex)
                {
                case StatusSimplex.PrimeiraEtapa:
                    _statusSimplex = this.AlgoritmoPrimeiraEtapa();
                    break;

                case StatusSimplex.SegundaEtapa:
                    _statusSimplex = this.AlgoritmoSegundaEtapa();
                    break;

                case StatusSimplex.AlgoritmoTroca:
                    _swtempoIteracao.Stop();
                    //if (_qtdIteracoes % 100 == 0)
                    Console.WriteLine(string.Format("Linha: {0}\tColuna: {1}\tIteracoes: {2}\tTempo: {3}s", _linhaPerm, _colunaPerm, _qtdIteracoes, _swtempoIteracao.Elapsed.TotalSeconds));
                    _swtempoIteracao = Stopwatch.StartNew();
                    _statusSimplex   = this.AlgoritmoTroca();
                    _qtdIteracoes++;
                    break;
                }
            }
            //fim otimizacao
            _swOtimizacao.Stop();

            _historico.Push(_statusSimplex);
        }
示例#3
0
        public GeradorLP(int qtdVariaveis, int qtdRestricoes, int densidadeMatriz)
        {
            _qtdRestricoes   = qtdRestricoes;
            _qtdVariaveis    = qtdVariaveis;
            _densidadeMatriz = densidadeMatriz;

            _rnd       = new Random();
            _funcaoObj = new FObjetivo();
            _variaveis = new List <VariavelCusto>();
        }
示例#4
0
        public MPSLPReader(string path, MPSLPReaderConfig config = null)
        {
            if (string.IsNullOrEmpty(path))
            {
                throw new ArgumentNullException("path");
            }

            if (!File.Exists(path))
            {
                throw new IOException("Arquivo nao existe.");
            }

            _path    = path;
            _mpsFile = new StreamReader(path, Encoding.UTF8);
            _funcao  = new FObjetivo();

            _config = config ?? new MPSLPReaderConfig();
        }
示例#5
0
 public TranscritorMPS(FObjetivo funcao)
 {
     _funcao  = funcao;
     _builder = new StringBuilder();
 }