<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Constraint_programming</id>
	<title>Constraint programming - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://debianws.lexgopc.com/wiki143/index.php?action=history&amp;feed=atom&amp;title=Constraint_programming"/>
	<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Constraint_programming&amp;action=history"/>
	<updated>2026-05-04T21:51:11Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=Constraint_programming&amp;diff=4538904&amp;oldid=prev</id>
		<title>imported&gt;Avocado: /* top */ Short descriptions should be &lt;40 chars where possible, and describe, not define, the subject</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Constraint_programming&amp;diff=4538904&amp;oldid=prev"/>
		<updated>2025-12-11T20:06:41Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;top: &lt;/span&gt; Short descriptions should be &amp;lt;40 chars where possible, and describe, not define, the subject&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Previous revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 20:06, 11 December 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Short description|&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Programming &lt;/del&gt;paradigm &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;wherein relations between variables are stated in the form of constraints&lt;/del&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Short description|&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Computer programming &lt;/ins&gt;paradigm}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Original research|date=June 2011}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Original research|date=June 2011}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>imported&gt;Avocado</name></author>
	</entry>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=Constraint_programming&amp;diff=3445062&amp;oldid=prev</id>
		<title>imported&gt;OAbot: Open access bot: url-access=subscription updated in citation with #oabot.</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Constraint_programming&amp;diff=3445062&amp;oldid=prev"/>
		<updated>2025-11-10T03:57:09Z</updated>

		<summary type="html">&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/OABOT&quot; class=&quot;extiw&quot; title=&quot;wikipedia:OABOT&quot;&gt;Open access bot&lt;/a&gt;: url-access=subscription updated in citation with #oabot.&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Previous revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 03:57, 10 November 2025&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l2&quot;&gt;Line 2:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 2:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Original research|date=June 2011}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Original research|date=June 2011}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&#039;&#039;&#039;Constraint programming (CP)&#039;&#039;&#039;&amp;lt;ref name=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;:0&quot;&lt;/del&gt;&amp;gt;{{Cite book|url=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;https://books.google.com/books?id=&lt;/del&gt;Kjap9ZWcKOoC&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;q=handbook+of+constraint+programming&amp;amp;&lt;/del&gt;pg=PP1|title=Handbook of Constraint Programming|last1=Rossi|first1=Francesca|author1link = Francesca Rossi|last2=Beek|first2=Peter van|last3=Walsh|first3=Toby|author3link = Toby Walsh|date=2006&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-08-18&lt;/del&gt;|publisher=Elsevier|isbn=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;9780080463803|language=en&lt;/del&gt;}}&amp;lt;/ref&amp;gt; is a paradigm for solving [[combinatorial]] problems that draws on a wide range of techniques from [[artificial intelligence]], [[computer science]], and [[operations research]]. In constraint programming, users declaratively state the [[Constraint (mathematics)|constraints]] on the feasible solutions for a set of decision variables. Constraints differ from the common [[Language primitive|primitives]] of [[imperative programming]] languages in that they do not specify a step or sequence of steps to execute, but rather the properties of a solution to be found. In addition to constraints, users also need to specify a method to solve these constraints. This typically draws upon standard methods like chronological [[backtracking]] and [[constraint propagation]], but may use customized code like a problem-specific branching [[Heuristic (computer science)|heuristic]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&#039;&#039;&#039;Constraint programming (CP)&#039;&#039;&#039;&amp;lt;ref name=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Rossi06&lt;/ins&gt;&amp;gt;{{Cite book|url=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{GBurl|&lt;/ins&gt;Kjap9ZWcKOoC&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|&lt;/ins&gt;pg=PP1&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}} &lt;/ins&gt;|title=Handbook of Constraint Programming|last1=Rossi|first1=Francesca|author1link = Francesca Rossi|last2=Beek|first2=Peter van|last3=Walsh|first3=Toby|author3link = Toby Walsh|date=2006 |publisher=Elsevier|isbn=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;978-0-08-046380-3 &lt;/ins&gt;}}&amp;lt;/ref&amp;gt; is a paradigm for solving [[combinatorial]] problems that draws on a wide range of techniques from [[artificial intelligence]], [[computer science]], and [[operations research]]. In constraint programming, users declaratively state the [[Constraint (mathematics)|constraints]] on the feasible solutions for a set of decision variables. Constraints differ from the common [[Language primitive|primitives]] of [[imperative programming]] languages in that they do not specify a step or sequence of steps to execute, but rather the properties of a solution to be found. In addition to constraints, users also need to specify a method to solve these constraints. This typically draws upon standard methods like chronological [[backtracking]] and [[constraint propagation]], but may use customized code like a problem-specific branching [[Heuristic (computer science)|heuristic]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Constraint programming takes its root from and can be expressed in the form of [[constraint logic programming]], which embeds constraints into a [[logic program]]. This variant of logic programming is due to Jaffar and Lassez,&amp;lt;ref&amp;gt;Jaffar&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, &lt;/del&gt;Joxan&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, and &lt;/del&gt;J-L. Lassez&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. &quot;[https://dl.acm.org/citation.cfm?id&lt;/del&gt;=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;41635 &lt;/del&gt;Constraint logic programming&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;].&quot; Proceedings of the 14th &lt;/del&gt;[[ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages]]. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ACM, 1987&lt;/del&gt;.&amp;lt;/ref&amp;gt; who extended in 1987 a specific class of constraints that were introduced in [[Prolog II]]. The first implementations of constraint logic programming were [[Prolog III]], [[CLP(R)]], and [[CHIP (programming language)|CHIP]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Constraint programming takes its root from and can be expressed in the form of [[constraint logic programming]], which embeds constraints into a [[logic program]]. This variant of logic programming is due to Jaffar and Lassez,&amp;lt;ref&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{cite conference |last1=&lt;/ins&gt;Jaffar &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|first1=&lt;/ins&gt;Joxan &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|first2=&lt;/ins&gt;J-L. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|last2=&lt;/ins&gt;Lassez &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|title&lt;/ins&gt;=Constraint logic programming &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|book-title=POPL87: Fourteenth Annual &lt;/ins&gt;[[ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages]] &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|publisher=Association for Computing Machinery |date=1987 |doi=10.1145/41625&lt;/ins&gt;.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;41635 |isbn=978-0-89791-215-0 |pages=111–9 |url=https://dl.acm.org/citation&lt;/ins&gt;.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;cfm?id=41635|url-access=subscription }}&lt;/ins&gt;&amp;lt;/ref&amp;gt; who extended in 1987 a specific class of constraints that were introduced in [[Prolog II]]. The first implementations of constraint logic programming were [[Prolog III]], [[CLP(R)]], and [[CHIP (programming language)|CHIP]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Instead of logic programming, constraints can be mixed with [[functional programming]], [[term rewriting]], and [[imperative language]]s.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Instead of logic programming, constraints can be mixed with [[functional programming]], [[term rewriting]], and [[imperative language]]s.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l74&quot;&gt;Line 74:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 74:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Perturbation vs refinement models==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Perturbation vs refinement models==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Languages for constraint-based programming follow one of two approaches:&amp;lt;ref&amp;gt;{{cite &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;book &lt;/del&gt;|last1=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Mayoh &lt;/del&gt;|first1=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Brian &lt;/del&gt;|last2=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Tyugu &lt;/del&gt;|first2=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Enn &lt;/del&gt;|last3=Penjam |&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;first3&lt;/del&gt;=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Jaan &lt;/del&gt;|date=1993 |title=Constraint Programming |url=https://&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;books&lt;/del&gt;.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;google&lt;/del&gt;.com/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;books?id=B0aqCAAAQBAJ &lt;/del&gt;|publisher=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[&lt;/del&gt;Springer &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Science+Business Media]] &lt;/del&gt;|page=76 |isbn=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;9783642859830&lt;/del&gt;}}&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Languages for constraint-based programming follow one of two approaches:&amp;lt;ref&amp;gt;{{cite &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;conference &lt;/ins&gt;|last1=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Borning &lt;/ins&gt;|first1=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;A. &lt;/ins&gt;|last2=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Freeman-Benson &lt;/ins&gt;|first2=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;B. &lt;/ins&gt;|last3&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;=Wilson |first3=M. |title=Constraint Hierarchies |editor1-last=Mayoh |editor1-first=B. |editor2-last=Tyugu |editor2-first=E. |editor3-last&lt;/ins&gt;=Penjam |&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;editor3-first&lt;/ins&gt;=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;J. &lt;/ins&gt;|date=1993 |&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;doi=10.1007/978-3-642-85983-0_4 |book-&lt;/ins&gt;title=Constraint Programming |url=https://&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;link&lt;/ins&gt;.&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;springer&lt;/ins&gt;.com/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;chapter/10.1007/978-3-642-85983-0_4 &lt;/ins&gt;|publisher=Springer |page=76 |isbn=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;978-3-642-85983-0 |series=NATO ASI F |volume=131|url-access=subscription &lt;/ins&gt;}}&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Refinement model: variables in the problem are initially unassigned, and each variable is assumed to be able to contain any value included in its range or domain. As computation progresses, values in the domain of a variable are pruned if they are shown to be incompatible with the possible values of other variables, until a single value is found for each variable.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Refinement model: variables in the problem are initially unassigned, and each variable is assumed to be able to contain any value included in its range or domain. As computation progresses, values in the domain of a variable are pruned if they are shown to be incompatible with the possible values of other variables, until a single value is found for each variable.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Perturbation model: variables in the problem are assigned a single initial value. At different times one or more variables receive perturbations (changes to their old value), and the system propagates the change trying to assign new values to other variables that are consistent with the perturbation.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* Perturbation model: variables in the problem are assigned a single initial value. At different times one or more variables receive perturbations (changes to their old value), and the system propagates the change trying to assign new values to other variables that are consistent with the perturbation.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Constraint propagation]] in [[Constraint Satisfaction Problems|constraint satisfaction problems]] is a typical example of a refinement model, and formula evaluation in [[spreadsheet]]s are a typical example of a perturbation model.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[Constraint propagation]] in [[Constraint Satisfaction Problems|constraint satisfaction problems]] is a typical example of a refinement model, and formula evaluation in [[spreadsheet]]s are a typical example of a perturbation model.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The refinement model is more general, as it does not restrict variables to have a single value, it can lead to several solutions to the same problem. However, the perturbation model is more intuitive for programmers using mixed imperative constraint object-oriented languages.&amp;lt;ref&amp;gt;Lopez&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, &lt;/del&gt;G.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, &lt;/del&gt;Freeman-Benson&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, &lt;/del&gt;B.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, &amp;amp; &lt;/del&gt;Borning&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, &lt;/del&gt;A. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(1994, January)&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[ftp&lt;/del&gt;://&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;trout&lt;/del&gt;.cs.washington.edu/tr/1993/09/UW-CSE-93-09-04.pdf &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Kaleidoscope: A constraint imperative programming language.]{{dead link&lt;/del&gt;|&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;date&lt;/del&gt;=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;May 2025&lt;/del&gt;|&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;bot&lt;/del&gt;=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;medic}}{{cbignore&lt;/del&gt;|&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;bot&lt;/del&gt;=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;medic&lt;/del&gt;}} &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;In &#039;&#039;Constraint Programming&#039;&#039; (pp. 313-329). Springer Berlin Heidelberg.&lt;/del&gt;&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The refinement model is more general, as it does not restrict variables to have a single value, it can lead to several solutions to the same problem. However, the perturbation model is more intuitive for programmers using mixed imperative constraint object-oriented languages.&amp;lt;ref&amp;gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{cite conference |last1=&lt;/ins&gt;Lopez &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|first1=&lt;/ins&gt;G. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|last2=&lt;/ins&gt;Freeman-Benson &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|first2=&lt;/ins&gt;B. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|last3=&lt;/ins&gt;Borning &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|first3=&lt;/ins&gt;A. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|title=Kaleidoscope: A constraint imperative programming language |editor1-last=Mayoh |editor1-first=B. |editor2-last=Tyugu |editor2-first=E. |editor3-last=Penjam |editor3-first=J&lt;/ins&gt;. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|date=1993 |doi=10.1007/978-3-642-85983-0_12 |book-title=Constraint Programming |url=https&lt;/ins&gt;://&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dada&lt;/ins&gt;.cs.washington.edu&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;/research&lt;/ins&gt;/tr/1993/09/UW-CSE-93-09-04.pdf |&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;publisher=Springer |pages=313–329 |isbn=978-3-642-85983-0 |series&lt;/ins&gt;=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;NATO ASI F &lt;/ins&gt;|&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;volume&lt;/ins&gt;=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;131 &lt;/ins&gt;|&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;page&lt;/ins&gt;= }}&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Domains==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==Domains==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l86&quot;&gt;Line 86:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 86:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Boolean data type|Boolean]] domains, where only true/false constraints apply ([[Boolean satisfiability problem|SAT problem]])&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Boolean data type|Boolean]] domains, where only true/false constraints apply ([[Boolean satisfiability problem|SAT problem]])&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[integer]] domains, [[Rational numbers|rational]] domains&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[integer]] domains, [[Rational numbers|rational]] domains&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Interval_(mathematics)|interval]] domains, in particular for [[Automated planning and scheduling|scheduling]] problems&amp;lt;ref&amp;gt;{{Cite book |last1=Baptiste |first1=Philippe |author-link1=Philippe Baptiste|url=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;https://books.google.com/books?id&lt;/del&gt;=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;qUzhBwAAQBAJ &lt;/del&gt;|title=Constraint-Based Scheduling: Applying Constraint Programming to Scheduling Problems |last2=Pape |first2=Claude Le |last3=Nuijten |first3=Wim |date=2012&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;-12-06 &lt;/del&gt;|publisher=Springer &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Science &amp;amp; Business Media &lt;/del&gt;|isbn=978-1-4615-1479-4 &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|language=en&lt;/del&gt;}}&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Interval_(mathematics)|interval]] domains, in particular for [[Automated planning and scheduling|scheduling]] problems&amp;lt;ref&amp;gt;{{Cite book |last1=Baptiste |first1=Philippe |author-link1=Philippe Baptiste |url=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{GBurl|qUzhBwAAQBAJ|pg&lt;/ins&gt;=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;PR5}} &lt;/ins&gt;|title=Constraint-Based Scheduling: Applying Constraint Programming to Scheduling Problems |last2=Pape |first2=Claude Le |last3=Nuijten |first3=Wim |date=2012 |publisher=Springer |isbn=978-1-4615-1479-4 }}&amp;lt;/ref&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Linear algebra|linear]] domains, where only [[linear]] functions are described and analyzed (although approaches to [[non-linear]] problems do exist)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[Linear algebra|linear]] domains, where only [[linear]] functions are described and analyzed (although approaches to [[non-linear]] problems do exist)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[wiktionary:finite|finite]] domains, where constraints are defined over [[finite set]]s&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* [[wiktionary:finite|finite]] domains, where constraints are defined over [[finite set]]s&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l97&quot;&gt;Line 97:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 97:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Local consistency&amp;#039;&amp;#039;&amp;#039; conditions are properties of [[Constraint satisfaction problem|constraint satisfaction problems]] related to the [[consistency]] of subsets of variables or constraints. They can be used to reduce the search space and make the problem easier to solve. Various kinds of local consistency conditions are leveraged, including &amp;#039;&amp;#039;&amp;#039;node consistency&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;arc consistency&amp;#039;&amp;#039;&amp;#039;, and &amp;#039;&amp;#039;&amp;#039;path consistency&amp;#039;&amp;#039;&amp;#039;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Local consistency&amp;#039;&amp;#039;&amp;#039; conditions are properties of [[Constraint satisfaction problem|constraint satisfaction problems]] related to the [[consistency]] of subsets of variables or constraints. They can be used to reduce the search space and make the problem easier to solve. Various kinds of local consistency conditions are leveraged, including &amp;#039;&amp;#039;&amp;#039;node consistency&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;arc consistency&amp;#039;&amp;#039;&amp;#039;, and &amp;#039;&amp;#039;&amp;#039;path consistency&amp;#039;&amp;#039;&amp;#039;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Every local consistency condition can be enforced by a transformation that changes the problem without changing its solutions. Such a transformation is called &#039;&#039;&#039;[[constraint propagation]]&#039;&#039;&#039;.&amp;lt;ref&amp;gt;{{&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Citation&lt;/del&gt;|last=Bessiere|first=Christian|chapter=Constraint Propagation|date=2006|pages=29–83|publisher=Elsevier|isbn=9780444527264|doi=10.1016/s1574-6526(06)80007-6|title=Handbook of Constraint Programming|volume=2|series=Foundations of Artificial Intelligence|citeseerx=10.1.1.398.4070}}&amp;lt;/ref&amp;gt; Constraint propagation works by reducing domains of variables, strengthening constraints, or creating new ones. This leads to a reduction of the search space, making the problem easier to solve by some algorithms. Constraint propagation can also be used as an unsatisfiability checker, incomplete in general but complete in some particular cases.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Every local consistency condition can be enforced by a transformation that changes the problem without changing its solutions. Such a transformation is called &#039;&#039;&#039;[[constraint propagation]]&#039;&#039;&#039;.&amp;lt;ref&amp;gt;{{&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;cite book&lt;/ins&gt;|last=Bessiere|first=Christian|chapter=Constraint Propagation|date=2006|pages=29–83|publisher=Elsevier|isbn=9780444527264|doi=10.1016/s1574-6526(06)80007-6|title=Handbook of Constraint Programming|volume=2|series=Foundations of Artificial Intelligence|citeseerx=10.1.1.398.4070}}&amp;lt;/ref&amp;gt; Constraint propagation works by reducing domains of variables, strengthening constraints, or creating new ones. This leads to a reduction of the search space, making the problem easier to solve by some algorithms. Constraint propagation can also be used as an unsatisfiability checker, incomplete in general but complete in some particular cases.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Constraint solving ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== Constraint solving ==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;There are three main algorithmic techniques for solving constraint satisfaction problems: backtracking search, local search, and dynamic programming.&amp;lt;ref name=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;:0&quot; &lt;/del&gt;/&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;There are three main algorithmic techniques for solving constraint satisfaction problems: backtracking search, local search, and dynamic programming.&amp;lt;ref name=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Rossi06 &lt;/ins&gt;/&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Backtracking search ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Backtracking search ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l152&quot;&gt;Line 152:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 152:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==External links==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;==External links==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Commonscat}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Commonscat}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;http&lt;/del&gt;://www.a4cp.org/ &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Association for &lt;/del&gt;Constraint Programming]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{refbegin}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*&lt;/del&gt;[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;http&lt;/del&gt;://www.a4cp.org/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;events/cp-conference-series CP Conference Series&lt;/del&gt;]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;https&lt;/ins&gt;://www.a4cp.org/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;events/cp-conference-series International Conference on Principles and Practice of &lt;/ins&gt;Constraint Programming]&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;. &lt;/ins&gt;[&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;https&lt;/ins&gt;://www.a4cp.org/ &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Association for Constraint Programming&lt;/ins&gt;]&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[&lt;/del&gt;http://kti.ms.mff.cuni.cz/~bartak/constraints/ &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Guide to Constraint Programming]&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{cite web |first=Roman |last=Barták  |title=On-line Guide to Constraint Programming |date=1998 |publisher=Charles University, Prague |url=&lt;/ins&gt;http://kti.ms.mff.cuni.cz/~bartak/constraints/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*{{webarchive |url=https://archive.today/20121205051244/http://www.mozart-oz.org/ |date=December 5, 2012 |title=The Mozart Programming System}}, an [[Oz (programming language)|Oz]]-based free software ([[X Window System]] style)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*{{webarchive |url=https://archive.today/20121205051244/http://www.mozart-oz.org/ |date=December 5, 2012 |title=The Mozart Programming System}}, an [[Oz (programming language)|Oz]]-based free software ([[X Window System]] style)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*{{webarchive |url=https://archive.today/20130107222548/http://4c.ucc.ie/web/index.jsp |date=January 7, 2013 |title=Cork Constraint Computation Centre}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*{{webarchive |url=https://archive.today/20130107222548/http://4c.ucc.ie/web/index.jsp |date=January 7, 2013 |title=Cork Constraint Computation Centre}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*{{cite web |first=Ken |last=Shirriff |title=Solving the NYTimes Pips puzzle with a constraint solver |date=October 2025 |url=http://www.righto.com/2025/10/solve-nyt-pips-with-constraints.html}} &lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*{{cite web |first=Brian |last=Scassellati |title=Constraint Satisfaction Problems |date=2019 |work=CPSC 470 – Artificial Intelligence |publisher=Yale University |url=https://zoo.cs.yale.edu/classes/cs470/lectures/s2019/07-CSP.pdf}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{refend}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Programming paradigms navbox}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{Programming paradigms navbox}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>imported&gt;OAbot</name></author>
	</entry>
	<entry>
		<id>http://debianws.lexgopc.com/wiki143/index.php?title=Constraint_programming&amp;diff=134371&amp;oldid=prev</id>
		<title>imported&gt;GreenC bot: Reformat 1 archive link. Wayback Medic 2.5 per WP:URLREQ#citeftp</title>
		<link rel="alternate" type="text/html" href="http://debianws.lexgopc.com/wiki143/index.php?title=Constraint_programming&amp;diff=134371&amp;oldid=prev"/>
		<updated>2025-05-27T10:26:05Z</updated>

		<summary type="html">&lt;p&gt;Reformat 1 archive link. &lt;a href=&quot;/wiki143/index.php?title=User:GreenC/WaybackMedic_2.5&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User:GreenC/WaybackMedic 2.5 (page does not exist)&quot;&gt;Wayback Medic 2.5&lt;/a&gt; per &lt;a href=&quot;/wiki143/index.php?title=WP:URLREQ&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;WP:URLREQ (page does not exist)&quot;&gt;WP:URLREQ#citeftp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Short description|Programming paradigm wherein relations between variables are stated in the form of constraints}}&lt;br /&gt;
{{Original research|date=June 2011}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Constraint programming (CP)&amp;#039;&amp;#039;&amp;#039;&amp;lt;ref name=&amp;quot;:0&amp;quot;&amp;gt;{{Cite book|url=https://books.google.com/books?id=Kjap9ZWcKOoC&amp;amp;q=handbook+of+constraint+programming&amp;amp;pg=PP1|title=Handbook of Constraint Programming|last1=Rossi|first1=Francesca|author1link = Francesca Rossi|last2=Beek|first2=Peter van|last3=Walsh|first3=Toby|author3link = Toby Walsh|date=2006-08-18|publisher=Elsevier|isbn=9780080463803|language=en}}&amp;lt;/ref&amp;gt; is a paradigm for solving [[combinatorial]] problems that draws on a wide range of techniques from [[artificial intelligence]], [[computer science]], and [[operations research]]. In constraint programming, users declaratively state the [[Constraint (mathematics)|constraints]] on the feasible solutions for a set of decision variables. Constraints differ from the common [[Language primitive|primitives]] of [[imperative programming]] languages in that they do not specify a step or sequence of steps to execute, but rather the properties of a solution to be found. In addition to constraints, users also need to specify a method to solve these constraints. This typically draws upon standard methods like chronological [[backtracking]] and [[constraint propagation]], but may use customized code like a problem-specific branching [[Heuristic (computer science)|heuristic]].&lt;br /&gt;
&lt;br /&gt;
Constraint programming takes its root from and can be expressed in the form of [[constraint logic programming]], which embeds constraints into a [[logic program]]. This variant of logic programming is due to Jaffar and Lassez,&amp;lt;ref&amp;gt;Jaffar, Joxan, and J-L. Lassez. &amp;quot;[https://dl.acm.org/citation.cfm?id=41635 Constraint logic programming].&amp;quot; Proceedings of the 14th [[ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages]]. ACM, 1987.&amp;lt;/ref&amp;gt; who extended in 1987 a specific class of constraints that were introduced in [[Prolog II]]. The first implementations of constraint logic programming were [[Prolog III]], [[CLP(R)]], and [[CHIP (programming language)|CHIP]].&lt;br /&gt;
&lt;br /&gt;
Instead of logic programming, constraints can be mixed with [[functional programming]], [[term rewriting]], and [[imperative language]]s.&lt;br /&gt;
Programming languages with built-in support for constraints include [[Oz programming language|Oz]] (functional programming) and [[Kaleidoscope programming language|Kaleidoscope]] (imperative programming). Mostly, constraints are implemented in imperative languages via &amp;#039;&amp;#039;constraint solving toolkits&amp;#039;&amp;#039;, which are separate libraries for an existing imperative language.&lt;br /&gt;
&lt;br /&gt;
==Constraint logic programming==&lt;br /&gt;
{{main|Constraint logic programming}}&lt;br /&gt;
&lt;br /&gt;
Constraint programming is an embedding of constraints in a host language. The first host languages used were [[logic programming]] languages, so the field was initially called &amp;#039;&amp;#039;constraint logic programming&amp;#039;&amp;#039;. The two paradigms share many important features, like logical variables and [[backtracking]]. Today most [[Prolog]] implementations include one or more libraries for constraint logic programming.&lt;br /&gt;
&lt;br /&gt;
The difference between the two is largely in their styles and approaches to modeling the world. Some problems are more natural (and thus, simpler) to write as logic programs, while some are more natural to write as constraint programs.&lt;br /&gt;
&lt;br /&gt;
The constraint programming approach is to search for a state of the world in which a large number of constraints are satisfied at the same time. A problem is typically stated as a state of the world containing a number of unknown variables. The constraint program searches for values for all the variables.&lt;br /&gt;
&lt;br /&gt;
Temporal concurrent constraint programming (TCC) and non-deterministic temporal concurrent constraint programming (MJV) are variants of constraint programming that can deal with time.&lt;br /&gt;
&lt;br /&gt;
==Constraint satisfaction problem==&lt;br /&gt;
{{main|Constraint satisfaction problem}}&lt;br /&gt;
&lt;br /&gt;
A constraint is a relation between multiple variables that limits the values these variables can take simultaneously.&lt;br /&gt;
{{math theorem&lt;br /&gt;
|Definition&lt;br /&gt;
|A constraint satisfaction problem on finite domains (or CSP) is defined by a triplet &amp;lt;math&amp;gt;(\mathcal{X},\mathcal{D},\mathcal{C})&amp;lt;/math&amp;gt; where:&lt;br /&gt;
* &amp;lt;math&amp;gt;\mathcal{X} = \{x_1, \dots, x_n \}&amp;lt;/math&amp;gt; is the set of variables of the problem;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mathcal{D} = \{\mathcal{D}_1, \dots, \mathcal{D}_n \}&amp;lt;/math&amp;gt; is the set of domains of the variables, i.e., for all &amp;lt;math&amp;gt;k \in [1; n]&amp;lt;/math&amp;gt; we have &amp;lt;math&amp;gt;x_k \in \mathcal{D}_k&amp;lt;/math&amp;gt;;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mathcal{C} = \{C_1, \dots, C_m \}&amp;lt;/math&amp;gt; is a set of constraints. A constraint &amp;lt;math&amp;gt;C_i=(\mathcal{X}_i, \mathcal{R}_i)&amp;lt;/math&amp;gt; is defined by a set &amp;lt;math&amp;gt;\mathcal{X}_i = \{x_{i_1}, \dots, x_{i_k}\}&amp;lt;/math&amp;gt; of variables and a relation &amp;lt;math&amp;gt;\mathcal{R}_i \subseteq \mathcal{D}_{i_1} \times \dots \times \mathcal{D}_{i_k}&amp;lt;/math&amp;gt; that defines the set of values allowed simultaneously for the variables of &amp;lt;math&amp;gt;\mathcal{X}_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Three categories of constraints exist:&lt;br /&gt;
* extensional constraints: constraints are defined by enumerating the set of values that would satisfy them;&lt;br /&gt;
* arithmetic constraints: constraints are defined by an arithmetic expression, i.e., using &amp;lt;math&amp;gt;&amp;lt;, &amp;gt;, \leq, \geq, =, \neq,...&amp;lt;/math&amp;gt;;&lt;br /&gt;
* logical constraints: constraints are defined with an explicit semantics, i.e., &amp;#039;&amp;#039;AllDifferent&amp;#039;&amp;#039;, &amp;#039;&amp;#039;AtMost&amp;#039;&amp;#039;,&amp;#039;&amp;#039;...&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
{{math theorem&lt;br /&gt;
|Definition&lt;br /&gt;
| An assignment (or model) &amp;lt;math&amp;gt;\mathcal{A}&amp;lt;/math&amp;gt; of a CSP &amp;lt;math&amp;gt;P = (\mathcal{X},\mathcal{D},\mathcal{C})&amp;lt;/math&amp;gt; is defined by the couple &amp;lt;math&amp;gt;\mathcal{A} = (\mathcal{X_{\mathcal{A}}}, \mathcal{V_{\mathcal{A}}})&amp;lt;/math&amp;gt; where:&lt;br /&gt;
* &amp;lt;math&amp;gt;\mathcal{X_{\mathcal{A}}} \subseteq \mathcal{X} &amp;lt;/math&amp;gt; is a subset of variable;&lt;br /&gt;
* &amp;lt;math&amp;gt;\mathcal{V_{\mathcal{A}}} = \{ v_{\mathcal{A}_1}, \dots,  v_{\mathcal{A}_k}\} \in  \{ \mathcal{D}_{\mathcal{A}_1}, \dots, \mathcal{D}_{\mathcal{A}_k}\}&amp;lt;/math&amp;gt; is the tuple of the values taken by the assigned variables.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Assignment is the association of a variable to a value from its domain. A partial assignment is when a subset of the variables of the problem has been assigned. A total assignment is when all the variables of the problem have been assigned.&lt;br /&gt;
&lt;br /&gt;
{{math theorem|Property|Given &amp;lt;math&amp;gt;\mathcal{A} = (\mathcal{X_{\mathcal{A}}}, \mathcal{V_{\mathcal{A}}})&amp;lt;/math&amp;gt; an assignment (partial or total) of a CSP &amp;lt;math&amp;gt;P = (\mathcal{X},\mathcal{D},\mathcal{C})&amp;lt;/math&amp;gt;, and &amp;lt;math&amp;gt;C_i = (\mathcal{X}_i, \mathcal{R}_i)&amp;lt;/math&amp;gt; a constraint of &amp;lt;math&amp;gt;P&amp;lt;/math&amp;gt; such as &amp;lt;math&amp;gt;\mathcal{X}_i \subseteq \mathcal{X_{\mathcal{A}}}&amp;lt;/math&amp;gt;, the assignment &amp;lt;math&amp;gt;\mathcal{A}&amp;lt;/math&amp;gt; satisfies the constraint &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; if and only if all the values &amp;lt;math&amp;gt;\mathcal{V}_{\mathcal{A}_i} = \{ v_i \in \mathcal{V}_{\mathcal{A}} \mbox{ such that } x_i \in \mathcal{X}_{i} \}&amp;lt;/math&amp;gt; of the variables of the constraint &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; belongs to &amp;lt;math&amp;gt;\mathcal{R}_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{math theorem&lt;br /&gt;
|Definition&lt;br /&gt;
|A solution of a CSP is a total assignment that satisfies all the constraints of the problem.}}&lt;br /&gt;
&lt;br /&gt;
During the search of the solutions of a CSP, a user can wish for:&lt;br /&gt;
&lt;br /&gt;
* finding a solution (satisfying all the constraints);&lt;br /&gt;
* finding all the solutions of the problem;&lt;br /&gt;
* [[automated theorem proving|proving]] the unsatisfiability of the problem.&lt;br /&gt;
&lt;br /&gt;
== Constraint optimization problem ==&lt;br /&gt;
{{Main|Constrained optimization}}&lt;br /&gt;
A constraint optimization problem (COP) is a constraint satisfaction problem associated to an objective function.&lt;br /&gt;
&lt;br /&gt;
An &amp;#039;&amp;#039;optimal solution&amp;#039;&amp;#039; to a minimization (maximization) COP is a solution that minimizes (maximizes) the value of the &amp;#039;&amp;#039;objective function&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
During the search of the solutions of a COP, a user can wish for:&lt;br /&gt;
&lt;br /&gt;
* finding a solution (satisfying all the constraints);&lt;br /&gt;
&lt;br /&gt;
* finding the best solution with respect to the objective;&lt;br /&gt;
* proving the optimality of the best found solution;&lt;br /&gt;
* proving the unsatisfiability of the problem.&lt;br /&gt;
&lt;br /&gt;
==Perturbation vs refinement models==&lt;br /&gt;
Languages for constraint-based programming follow one of two approaches:&amp;lt;ref&amp;gt;{{cite book |last1=Mayoh |first1=Brian |last2=Tyugu |first2=Enn |last3=Penjam |first3=Jaan |date=1993 |title=Constraint Programming |url=https://books.google.com/books?id=B0aqCAAAQBAJ |publisher=[[Springer Science+Business Media]] |page=76 |isbn=9783642859830}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Refinement model: variables in the problem are initially unassigned, and each variable is assumed to be able to contain any value included in its range or domain. As computation progresses, values in the domain of a variable are pruned if they are shown to be incompatible with the possible values of other variables, until a single value is found for each variable.&lt;br /&gt;
* Perturbation model: variables in the problem are assigned a single initial value. At different times one or more variables receive perturbations (changes to their old value), and the system propagates the change trying to assign new values to other variables that are consistent with the perturbation.&lt;br /&gt;
[[Constraint propagation]] in [[Constraint Satisfaction Problems|constraint satisfaction problems]] is a typical example of a refinement model, and formula evaluation in [[spreadsheet]]s are a typical example of a perturbation model.&lt;br /&gt;
&lt;br /&gt;
The refinement model is more general, as it does not restrict variables to have a single value, it can lead to several solutions to the same problem. However, the perturbation model is more intuitive for programmers using mixed imperative constraint object-oriented languages.&amp;lt;ref&amp;gt;Lopez, G., Freeman-Benson, B., &amp;amp; Borning, A. (1994, January). [ftp://trout.cs.washington.edu/tr/1993/09/UW-CSE-93-09-04.pdf Kaleidoscope: A constraint imperative programming language.]{{dead link|date=May 2025|bot=medic}}{{cbignore|bot=medic}} In &amp;#039;&amp;#039;Constraint Programming&amp;#039;&amp;#039; (pp. 313-329). Springer Berlin Heidelberg.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Domains==&lt;br /&gt;
The constraints used in constraint programming are typically over some specific domains. Some popular domains for constraint programming are:&lt;br /&gt;
&lt;br /&gt;
* [[Boolean data type|Boolean]] domains, where only true/false constraints apply ([[Boolean satisfiability problem|SAT problem]])&lt;br /&gt;
* [[integer]] domains, [[Rational numbers|rational]] domains&lt;br /&gt;
* [[Interval_(mathematics)|interval]] domains, in particular for [[Automated planning and scheduling|scheduling]] problems&amp;lt;ref&amp;gt;{{Cite book |last1=Baptiste |first1=Philippe |author-link1=Philippe Baptiste|url=https://books.google.com/books?id=qUzhBwAAQBAJ |title=Constraint-Based Scheduling: Applying Constraint Programming to Scheduling Problems |last2=Pape |first2=Claude Le |last3=Nuijten |first3=Wim |date=2012-12-06 |publisher=Springer Science &amp;amp; Business Media |isbn=978-1-4615-1479-4 |language=en}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[Linear algebra|linear]] domains, where only [[linear]] functions are described and analyzed (although approaches to [[non-linear]] problems do exist)&lt;br /&gt;
* [[wiktionary:finite|finite]] domains, where constraints are defined over [[finite set]]s&lt;br /&gt;
* mixed domains, involving two or more of the above&lt;br /&gt;
&lt;br /&gt;
Finite domains is one of the most successful domains of constraint programming. In some areas (like [[operations research]]) constraint programming is often identified with constraint programming over finite domains.&lt;br /&gt;
&lt;br /&gt;
== Constraint propagation ==&lt;br /&gt;
{{Main|Constraint propagation}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Local consistency&amp;#039;&amp;#039;&amp;#039; conditions are properties of [[Constraint satisfaction problem|constraint satisfaction problems]] related to the [[consistency]] of subsets of variables or constraints. They can be used to reduce the search space and make the problem easier to solve. Various kinds of local consistency conditions are leveraged, including &amp;#039;&amp;#039;&amp;#039;node consistency&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;arc consistency&amp;#039;&amp;#039;&amp;#039;, and &amp;#039;&amp;#039;&amp;#039;path consistency&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Every local consistency condition can be enforced by a transformation that changes the problem without changing its solutions. Such a transformation is called &amp;#039;&amp;#039;&amp;#039;[[constraint propagation]]&amp;#039;&amp;#039;&amp;#039;.&amp;lt;ref&amp;gt;{{Citation|last=Bessiere|first=Christian|chapter=Constraint Propagation|date=2006|pages=29–83|publisher=Elsevier|isbn=9780444527264|doi=10.1016/s1574-6526(06)80007-6|title=Handbook of Constraint Programming|volume=2|series=Foundations of Artificial Intelligence|citeseerx=10.1.1.398.4070}}&amp;lt;/ref&amp;gt; Constraint propagation works by reducing domains of variables, strengthening constraints, or creating new ones. This leads to a reduction of the search space, making the problem easier to solve by some algorithms. Constraint propagation can also be used as an unsatisfiability checker, incomplete in general but complete in some particular cases.&lt;br /&gt;
&lt;br /&gt;
== Constraint solving ==&lt;br /&gt;
There are three main algorithmic techniques for solving constraint satisfaction problems: backtracking search, local search, and dynamic programming.&amp;lt;ref name=&amp;quot;:0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Backtracking search ===&lt;br /&gt;
{{Main|Backtracking}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Backtracking search&amp;#039;&amp;#039;&amp;#039; is a general [[algorithm]] for finding all (or some) solutions to some [[Computational problem|computational problems]], notably [[Constraint satisfaction problem|constraint satisfaction problems]], that incrementally builds candidates to the solutions, and abandons a candidate (&amp;quot;backtracks&amp;quot;) as soon as it determines that the candidate cannot possibly be completed to a valid solution.&lt;br /&gt;
&lt;br /&gt;
=== Local Search ===&lt;br /&gt;
{{Main|Local search (constraint satisfaction)}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Local search&amp;#039;&amp;#039;&amp;#039; is an incomplete method for finding a solution to a [[Constraint satisfaction problem|problem]]. It is based on iteratively improving an assignment of the variables until all constraints are satisfied. In particular, local search algorithms typically modify the value of a variable in an assignment at each step. The new assignment is close to the previous one in the space of assignment, hence the name &amp;#039;&amp;#039;local search&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
=== Dynamic programming ===&lt;br /&gt;
{{Main|Dynamic programming}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Dynamic programming&amp;#039;&amp;#039;&amp;#039; is both a [[mathematical optimization]] method and a computer programming method. It refers to simplifying a complicated problem by breaking it down into simpler sub-problems in a [[Recursion|recursive]] manner. While some [[decision problem]]s cannot be taken apart this way, decisions that span several points in time do often break apart recursively. Likewise, in computer science, if a problem can be solved optimally by breaking it into sub-problems and then recursively finding the optimal solutions to the sub-problems, then it is said to have [[optimal substructure]].&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
The syntax for expressing constraints over finite domains depends on the host language. The following is a [[Prolog]] program that solves the classical [[alphametic]] puzzle SEND+MORE=MONEY in constraint logic programming:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;prolog&amp;quot;&amp;gt;&lt;br /&gt;
% This code works in both YAP and SWI-Prolog using the environment-supplied&lt;br /&gt;
% CLPFD constraint solver library.  It may require minor modifications to work&lt;br /&gt;
% in other Prolog environments or using other constraint solvers.&lt;br /&gt;
:- use_module(library(clpfd)).&lt;br /&gt;
sendmore(Digits) :-&lt;br /&gt;
   Digits = [S,E,N,D,M,O,R,Y],   % Create variables&lt;br /&gt;
   Digits ins 0..9,                % Associate domains to variables&lt;br /&gt;
   S #\= 0,                        % Constraint: S must be different from 0&lt;br /&gt;
   M #\= 0,&lt;br /&gt;
   all_different(Digits),          % all the elements must take different values&lt;br /&gt;
                1000*S + 100*E + 10*N + D     % Other constraints&lt;br /&gt;
              + 1000*M + 100*O + 10*R + E&lt;br /&gt;
   #= 10000*M + 1000*O + 100*N + 10*E + Y,&lt;br /&gt;
   label(Digits).                  % Start the search&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The interpreter creates a variable for each letter in the puzzle. The operator &amp;lt;code&amp;gt;ins&amp;lt;/code&amp;gt; is used to specify the domains of these variables, so that they range over the set of values {0,1,2,3, ..., 9}. The constraints &amp;lt;code&amp;gt;S#\=0&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;M#\=0&amp;lt;/code&amp;gt; means that these two variables cannot take the value zero. When the interpreter evaluates these constraints, it reduces the domains of these two variables by removing the value 0 from them. Then, the constraint &amp;lt;code&amp;gt;all_different(Digits)&amp;lt;/code&amp;gt; is considered; it does not reduce any domain, so it is simply stored. The last constraint specifies that the digits assigned to the letters must be such that &amp;quot;SEND+MORE=MONEY&amp;quot; holds when each letter is replaced by its corresponding digit. From this constraint, the solver infers that M=1. All stored constraints involving variable M are awakened: in this case, [[constraint propagation]] on the &amp;lt;code&amp;gt;all_different&amp;lt;/code&amp;gt; constraint removes value 1 from the domain of all the remaining variables. Constraint propagation may solve the problem by reducing all domains to a single value, it may prove that the problem has no solution by reducing a domain to the empty set, but may also terminate without proving satisfiability or unsatisfiability. The &amp;#039;&amp;#039;&amp;#039;label&amp;#039;&amp;#039;&amp;#039; literals are used to actually perform search for a solution.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[Combinatorial optimization]]&lt;br /&gt;
* [[Concurrent constraint logic programming]]&lt;br /&gt;
* [[Constraint logic programming]]&lt;br /&gt;
* [[Heuristic (computer science)|Heuristic algorithms]]&lt;br /&gt;
* [[List of constraint programming languages]]&lt;br /&gt;
* [[Mathematical optimization]]&lt;br /&gt;
* [[Nurse scheduling problem]]&lt;br /&gt;
* [[Regular constraint]]&lt;br /&gt;
* [[Satisfiability modulo theories]]&lt;br /&gt;
* [[Traveling tournament problem]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
{{Commonscat}}&lt;br /&gt;
*[http://www.a4cp.org/ Association for Constraint Programming]&lt;br /&gt;
*[http://www.a4cp.org/events/cp-conference-series CP Conference Series]&lt;br /&gt;
*[http://kti.ms.mff.cuni.cz/~bartak/constraints/ Guide to Constraint Programming]&lt;br /&gt;
*{{webarchive |url=https://archive.today/20121205051244/http://www.mozart-oz.org/ |date=December 5, 2012 |title=The Mozart Programming System}}, an [[Oz (programming language)|Oz]]-based free software ([[X Window System]] style)&lt;br /&gt;
*{{webarchive |url=https://archive.today/20130107222548/http://4c.ucc.ie/web/index.jsp |date=January 7, 2013 |title=Cork Constraint Computation Centre}}&lt;br /&gt;
&lt;br /&gt;
{{Programming paradigms navbox}}&lt;br /&gt;
{{Types of programming languages}}&lt;br /&gt;
{{Authority control}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Constraint programming| ]]&lt;br /&gt;
[[Category:Programming paradigms]]&lt;br /&gt;
[[Category:Declarative programming]]&lt;br /&gt;
&amp;lt;!-- Hidden categories below --&amp;gt;&lt;br /&gt;
[[Category:Articles with example code]]&lt;/div&gt;</summary>
		<author><name>imported&gt;GreenC bot</name></author>
	</entry>
</feed>