public void Solve(IGomoriInitializer initializer, TextWriter writer) { iterationNumber = 0; _task = initializer.Clone(); _writer = writer; _artJ = new List<ArtJEntry>(); while (GomoriIteration()) // Производим итерации в цикле, пока { // не будет найдено решение } }
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; }
public void Solve(IGomoriInitializer task) { _task = task; //_task.c = -_task.c; FirstPhase(); //_writer.WriteLine(task.A*_task.xo); }