示例#1
0
        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();
                }
            }
        }
示例#2
0
        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");
        }
示例#3
0
        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.");
            }
        }
示例#4
0
        public void SetDesigualdadeRestricao(string restName, Desigualdade desigualdade)
        {
            Restricao restricaoAux = this.RecuperarRestricao(restName);

            restricaoAux.Desigualdade = desigualdade;
        }
示例#5
0
 public void SetDesigualdadeRestricao(string restName, Desigualdade desigualdade)
 {
     Restricao restricaoAux = this.RecuperarRestricao(restName);
       restricaoAux.Desigualdade = desigualdade;
 }
示例#6
0
        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.");
              }
        }