Во время работы обратного алгоритма должны выполняться следующие условия:
1. Только ограничения, имеющие отношение к конфликту могут изменить статус (смягчены или деактивированы) для того, чтобы избежать бесполезного поиска.
2. Повторно должна быть достигнута потенциально лучшая конфигурация, чтобы добиться значимого результата.
3. Никакая перспективная конфигурация не должна использоваться повторно, чтобы избежать циклов.
4. Для полноты алгоритма никакая перспективная конфигурация не должна быть пропущена.
5. Должна быть достигнута глобальная совместимость нового хранилища активных ограничений, повторно выполняя при этом как можно меньше работы.
Обратное правило является правилом, которое перемещает ограничения в хранилище неисследованных ограничений. Если текущий конфликт возник не первым, то во время решения предыдущего конфликта обратное правило генерирует перспективную конфигурацию с неисследованными ограничениями.
Ограничения, смягченные в предыдущих конфликтах, следует пересмотреть на предмет реактивации, если некоторые ограничения, вовлеченные в те конфликты, сейчас смягчены. Это даст шанс, что новое смягчение также разрешит эти ранние конфликты, следовательно, позволяет ранее смягченным ограничениям стать активными. За осуществление обратного правила отвечает функция Backward.
И наконец, алгоритм IHCSостанавливается, как только конфигурация становится
Рассмотрим следующий пример:
при этом начальные значения
В данной системе ограничений первых два неравенства являются строгими, а вторые два – слабыми. На первом шаге первое сильное ограничение
На втором шаге из
Учитывая третье ограничение
В данной курсовой работе были рассмотрены основные понятия интервальной арифметики и задачи распространения ограничений.
Задачи распространения ограничений над непрерывными областями обычно называются численными задачами удовлетворения ограничений. Задачи этого класса могут быть использованы для представления большого количества описывающих физические или химические явления моделей, в частности моделей с неточными данными или частично определенными параметрами.
Для решения задач распространения ограничений существует различное множество алгоритмов. В курсовой работе были рассмотрены два из них: алгоритм распространения ограничений Indigo и IHCS (IncrementalHierarchicalConstraintSolver). Алгоритм Indigo заключается в том, что при обработке ограничений от самого сильного к самому слабому мы пытаемся удовлетворить каждое ограничение путем сжимания границ переменных, входящих в него, при этом сжимание границ одних переменных ограничения может стать причиной сжимания границ других переменных. Для выполнения этих действий в алгоритме используется очередь ограничений, которые необходимо проверить. Изначально очередь содержит только исходные ограничения
Алгоритм IHCSбазируется на идее преобразования начальной конфигурации
Рассматривая эти два алгоритма можно сказать, что Indigo достаточно легок в понимании и прост в реализации, по сравнению с IHCS. В данной курсовой работе был реализован алгоритм Indigo на языке программирования Delphi (см. Приложение А). В дальнейшем планируется реализовать IHCS и сравнить результаты, получаемые с помощью двух алгоритмов.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Семенов, А.Л. Методы распространения ограничений: основные концепции / А.Л. Семенов // Международное совещание по интервальной математике и методам распространения ограничений: труды совещания. – Новосибирск. – 2003. – С. 6–20.
2. Лоенко, М. Решение систем нелинейных уравнений методами интервального распространения ограничений / М. Лоенко // Новосибирский филиал Российского научно-исследовательского института искусственного интеллекта. – Россия. – Том 7. – №2. – 2002.– С.84–93.
3. Borning, A. The Indigo Algorithm / A. Borning, R. Anderson, B. Freeman-Benson // TR 96-05-01, Department of Computer Science and Engineering, University of Washington. – 1996.
4. Menezes, F. Incremental Hierarchical Constraint Solver (IHCS) / F. Menezes, P. Barahoma, P. Codognet // An Incremental Hierarchical Constraint Solver, in: Proceedings of PPCP93, – Newport, 1993. – pp. 190-199.
5. Barták, R. Constraint Guide – Constraint Hierarchy Solvers / R. Barták // Guide to Constraint Programming [Электронныйресурс]. – 1998. – Режимдоступа : http://kti.mff.cuni.cz/~bartak/constraints/ch_solvers.html. – Датадоступа : 25.04.2010.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, UMathParser, MyFunctions;
type
TForm1 = class(TForm)
Button1: TButton;
GroupBox1: TGroupBox;
ListBox1: TListBox;
GroupBox3: TGroupBox;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
TConstraint = class
constructor Create(Constraint : string);
destructor Free;
function TightenBoundsForEqual(V : string) : boolean;
function TightenBoundsForNoEqual(V : string) : boolean;
function TightenBoundsForWeakEqual(V : string) : boolean;
function TightenBoundsFor(V : string) : boolean;
function IsElemInVars(Elem : string) : boolean;
public
Prior : char; // приоритет ограничения
CType : char; // тип ограничения <= = >= 'l' 'e' 'm'
Variables : TSArray; // переменные
VarCount : integer; // число переменных
LPart, RPart : TMathParser;
end;
TVariable = class
VarName : string;
LBound, RBound : extended; // границы интервала
constructor Create(pName: string; pLBound, pRBound: extended);
destructor Free;
procedure SetBounds(pLBound,pRBound : extended);
end;
TConstraintList = record
Count : integer;
List : array of TConstraint;
end;
TVariableList = record
Count : integer;
List : array of TVariable;
end;
const
LInfinity = -1e50; // минус бесконечность
RInfinity = 1e50; // плюс бесконечность
var Form1: TForm1;
implementation
uses CQueue, CSet, Math, VSet, Unit2;
{$R *.dfm}
var ConstraintList : TConstraintList; // список ограничений
VariableList : TVariableList; // список переменных
constructor TConstraint.Create(Constraint : string);