Exemplo n.º 1
0
        public void Solve(IGomoriInitializer initializer, TextWriter writer)
        {
            iterationNumber = 0;
            _task = initializer.Clone();
            _writer = writer;
            _artJ = new List<ArtJEntry>();
            while (GomoriIteration())   // Производим итерации в цикле, пока
            {                           // не будет найдено решение

            }
        }
Exemplo n.º 2
0
        public static bool Solve(IGomoriInitializer initializer, TextWriter writer)
        {
            _task = initializer;
            // Step1
            var vectorCollection = new List<Vector<double>>();
            foreach (var item in _task.Jb)
            {
                vectorCollection.Add(_task.A.Column(item));
            }

            var aBMatrix = DenseMatrix.OfColumnVectors(vectorCollection.ToArray());

            var bMatrix = aBMatrix.Inverse();

            var cVector = new DenseVector(_task.Jb.Count);
            for (int i = 0; i < cVector.Count; i++)
            {
                cVector[i] = _task.c[_task.Jb[i]];
            }

            yVector = cVector * bMatrix;
            deltas = new List<double>();

            _JNbUpper = new List<int>();
            _JNbLower = new List<int>();

            for (int i = 0; i < _task.A.ColumnCount; i++)
            {
                var delta = yVector * _task.A.Column(i) - _task.c[i];
                deltas.Add(delta);
                if (!_task.Jb.Contains(i))
                {
                    if (delta >= Eps)
                    {
                        _JNbUpper.Add(i);
                    }
                    else
                    {
                        _JNbLower.Add(i);
                    }
                }
            }

            // Iterations
            while (ModificatedDualIteration())
            {

            }
            writer.WriteLine("Optimal basis:");
            writer.WriteLine(_task.xo.ToString());
            return _stopStep == 3;
        }
Exemplo n.º 3
0
 public void Solve(IGomoriInitializer task)
 {
     _task = task;
     //_task.c = -_task.c;
     FirstPhase();
     //_writer.WriteLine(task.A*_task.xo);
 }