private void readBOUNDS() { /* type meaning * --------------------------------------------------- * LO lower bound b <= x (< +inf) * UP upper bound (0 <=) x <= b * FX fixed variable x = b * FR free variable -inf < x < +inf * MI lower bound -inf -inf < x (<= 0) * PL upper bound +inf (0 <=) x < +inf * BV binary variable x = 0 or 1 * LI integer variable b <= x (< +inf) * UI integer variable (0 <=) x <= b * SC semi-cont variable x = 0 or l <= x <= b * l is the lower bound on the variable * If none set then defaults to 1*/ //Como se trata de um bloco opcional dos problemas, //Apenas tratarei os tipos LO e UP. Restricao auxRest; string boundType; string boundName; string nomeVariavel; string boundValue; string auxRestName; //sera criada uma nova restricao se a fronteira for valida Desigualdade tipoDesigualdade = Desigualdade.Igual; if (_linha.Equals("BOUNDS")) { _linha = _mpsFile.ReadLine(); while (!_linha.Equals("ENDATA")) { _tokens = GerarTokens(_linha); boundType = _tokens[0]; boundName = _tokens[1]; nomeVariavel = _tokens[2]; boundValue = _tokens[3]; if (boundType.Equals("LO")) { tipoDesigualdade = Desigualdade.MaiorOuIgual; } else if (boundType.Equals("UP")) { tipoDesigualdade = Desigualdade.MenorOuIgual; } auxRest = _funcao.AddRestricao(); //Configurar nova restricao _funcao.AddVariavelRestricao(auxRest.Nome, nomeVariavel, 1.0); _funcao.SetDesigualdadeRestricao(auxRest.Nome, tipoDesigualdade); _funcao.SetTermoLivreRestricao(auxRest.Nome, double.Parse(boundValue, _culture)); _linha = _mpsFile.ReadLine(); } } }
private string ValorDesigualdadeToString(int desigualdade) { Desigualdade enumDes = (Desigualdade)Enum.Parse(typeof(Desigualdade), desigualdade.ToString()); if (enumDes == Desigualdade.Maior || enumDes == Desigualdade.MaiorOuIgual) { return("G"); } if (enumDes == Desigualdade.Menor || enumDes == Desigualdade.MenorOuIgual) { return("L"); } return("L"); }
private int GerarTermoLivreFactivelRestricao(int custoRest, Desigualdade desigualdade) { switch (desigualdade) { case Desigualdade.Menor: return(_rnd.Next(custoRest + 1, custoRest + _rnd.Next(2, 100))); case Desigualdade.MenorOuIgual: return(_rnd.Next(custoRest, custoRest + _rnd.Next(1, 100))); case Desigualdade.Maior: return(_rnd.Next(custoRest - _rnd.Next(2, 100), custoRest - 1)); case Desigualdade.MaiorOuIgual: return(_rnd.Next(custoRest - _rnd.Next(1, 100), custoRest)); default: throw new ApplicationException("Foi gerado uma desigualdade invalida."); } }
public void SetDesigualdadeRestricao(string restName, Desigualdade desigualdade) { Restricao restricaoAux = this.RecuperarRestricao(restName); restricaoAux.Desigualdade = desigualdade; }
private int GerarTermoLivreFactivelRestricao(int custoRest, Desigualdade desigualdade) { switch (desigualdade) { case Desigualdade.Menor: return _rnd.Next(custoRest + 1, custoRest + _rnd.Next(2, 100)); case Desigualdade.MenorOuIgual: return _rnd.Next(custoRest, custoRest + _rnd.Next(1, 100)); case Desigualdade.Maior: return _rnd.Next(custoRest - _rnd.Next(2, 100), custoRest - 1); case Desigualdade.MaiorOuIgual: return _rnd.Next(custoRest - _rnd.Next(1, 100), custoRest); default: throw new ApplicationException("Foi gerado uma desigualdade invalida."); } }