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); }
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); }
public GeradorLP(int qtdVariaveis, int qtdRestricoes, int densidadeMatriz) { _qtdRestricoes = qtdRestricoes; _qtdVariaveis = qtdVariaveis; _densidadeMatriz = densidadeMatriz; _rnd = new Random(); _funcaoObj = new FObjetivo(); _variaveis = new List <VariavelCusto>(); }
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(); }
public TranscritorMPS(FObjetivo funcao) { _funcao = funcao; _builder = new StringBuilder(); }