<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
	<id>https://orsj-ml.org/orwiki/wiki/index.php?action=history&amp;feed=atom&amp;title=%E3%80%8A%E5%88%B6%E7%B4%84%E5%85%85%E8%B6%B3%E5%95%8F%E9%A1%8C%E3%80%8B</id>
	<title>《制約充足問題》 - 版の履歴</title>
	<link rel="self" type="application/atom+xml" href="https://orsj-ml.org/orwiki/wiki/index.php?action=history&amp;feed=atom&amp;title=%E3%80%8A%E5%88%B6%E7%B4%84%E5%85%85%E8%B6%B3%E5%95%8F%E9%A1%8C%E3%80%8B"/>
	<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E5%88%B6%E7%B4%84%E5%85%85%E8%B6%B3%E5%95%8F%E9%A1%8C%E3%80%8B&amp;action=history"/>
	<updated>2026-04-10T08:32:40Z</updated>
	<subtitle>このウィキのこのページに関する変更履歴</subtitle>
	<generator>MediaWiki 1.35.3</generator>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E5%88%B6%E7%B4%84%E5%85%85%E8%B6%B3%E5%95%8F%E9%A1%8C%E3%80%8B&amp;diff=7825&amp;oldid=prev</id>
		<title>2007年8月6日 (月) 17:30にKuwashimaによる</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E5%88%B6%E7%B4%84%E5%85%85%E8%B6%B3%E5%95%8F%E9%A1%8C%E3%80%8B&amp;diff=7825&amp;oldid=prev"/>
		<updated>2007-08-06T17:30:01Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&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;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2007年8月6日 (月) 17:30時点における版&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-l33&quot; &gt;33行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;33行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;[3] E. Tsang, ''Foundations of Constraint Satisfaction'', Academic Press, 1993.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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;[3] E. Tsang, ''Foundations of Constraint Satisfaction'', Academic Press, 1993.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&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 colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&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 colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&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;[[category:近似・知能・感覚的手法|せいやくじゅうそくもんだい]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Kuwashima</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E5%88%B6%E7%B4%84%E5%85%85%E8%B6%B3%E5%95%8F%E9%A1%8C%E3%80%8B&amp;diff=5827&amp;oldid=prev</id>
		<title>Orsjwiki: &quot;《制約充足問題》&quot; を保護しました。 [edit=sysop:move=sysop]</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E5%88%B6%E7%B4%84%E5%85%85%E8%B6%B3%E5%95%8F%E9%A1%8C%E3%80%8B&amp;diff=5827&amp;oldid=prev"/>
		<updated>2007-07-19T13:26:45Z</updated>

		<summary type="html">&lt;p&gt;&amp;quot;《制約充足問題》&amp;quot; を保護しました。 [edit=sysop:move=sysop]&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;ja&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2007年7月19日 (木) 13:26時点における版&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;ja&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(相違点なし)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Orsjwiki</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E5%88%B6%E7%B4%84%E5%85%85%E8%B6%B3%E5%95%8F%E9%A1%8C%E3%80%8B&amp;diff=5029&amp;oldid=prev</id>
		<title>2007年7月16日 (月) 14:00に220.104.197.230による</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E5%88%B6%E7%B4%84%E5%85%85%E8%B6%B3%E5%95%8F%E9%A1%8C%E3%80%8B&amp;diff=5029&amp;oldid=prev"/>
		<updated>2007-07-16T14:00:22Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&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;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2007年7月16日 (月) 14:00時点における版&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-l4&quot; &gt;4行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;4行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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 class=&quot;diffchange diffchange-inline&quot;&gt;:&lt;/del&gt;&amp;lt;math&amp;gt;C_j(X_{j_1},X_{j_2}, \ldots, X_{j_{t_j}})   \subseteq D_{j_1} \times D_{j_2} \times \cdots \times D_{j_{t_j}}  (j = 1, 2, \ldots, m)\, &amp;lt;/math&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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 class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;center&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&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;&amp;lt;math&amp;gt;C_j(X_{j_1},X_{j_2}, \ldots, X_{j_{t_j}})   \subseteq D_{j_1} \times D_{j_2} \times \cdots \times D_{j_{t_j}}  (j = 1, 2, \ldots, m)\, &amp;lt;/math&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&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 class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/center&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>220.104.197.230</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E5%88%B6%E7%B4%84%E5%85%85%E8%B6%B3%E5%95%8F%E9%A1%8C%E3%80%8B&amp;diff=1901&amp;oldid=prev</id>
		<title>2007年7月7日 (土) 02:38に122.26.167.76による</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E5%88%B6%E7%B4%84%E5%85%85%E8%B6%B3%E5%95%8F%E9%A1%8C%E3%80%8B&amp;diff=1901&amp;oldid=prev"/>
		<updated>2007-07-07T02:38:42Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&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;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2007年7月7日 (土) 02:38時点における版&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;1行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;1行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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 satisfaction problem) 】'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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 satisfaction problem) 】'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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 satisfaction problem, CSP) は,一般に, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$ &lt;/del&gt;個の変数 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;&amp;lt;math&amp;gt;X_i&amp;lt;/math&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$ $&lt;/del&gt;&amp;lt;math&amp;gt;(i = 1, 2, \ldots, n)&amp;lt;/math&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;と各変数 &amp;lt;math&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;X_i&amp;lt;/math&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$ &lt;/del&gt;がとり得る有限個の値から成る領域 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;&amp;lt;math&amp;gt;D_i&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;&amp;lt;/math&amp;gt;,及び &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;&amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;個の制約&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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 satisfaction problem, CSP) は,一般に, &amp;lt;math&amp;gt;n&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\, &lt;/ins&gt;&amp;lt;/math&amp;gt; 個の変数 &amp;lt;math&amp;gt;X_i&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\, &lt;/ins&gt;&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;(i = 1, 2, \ldots, n)&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\, &lt;/ins&gt;&amp;lt;/math&amp;gt;と各変数 &amp;lt;math&amp;gt;X_i&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\, &lt;/ins&gt;&amp;lt;/math&amp;gt; がとり得る有限個の値から成る領域 &amp;lt;math&amp;gt;D_i&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\, &lt;/ins&gt;&amp;lt;/math&amp;gt;,及び &amp;lt;math&amp;gt;m&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\, &lt;/ins&gt;&amp;lt;/math&amp;gt;個の制約&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;:&amp;lt;math&amp;gt;C_j(X_{j_1},X_{j_2}, \ldots, X_{j_{t_j}})   \subseteq D_{j_1} \times D_{j_2} \times \cdots \times D_{j_{t_j}}  (j = 1, 2, \ldots, m)&amp;lt;/math&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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;:&amp;lt;math&amp;gt;C_j(X_{j_1},X_{j_2}, \ldots, X_{j_{t_j}})   \subseteq D_{j_1} \times D_{j_2} \times \cdots \times D_{j_{t_j}}  (j = 1, 2, \ldots, m)&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\, &lt;/ins&gt;&amp;lt;/math&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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 class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;&amp;lt;math&amp;gt;C_j&amp;lt;/math&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$ &lt;/del&gt;は,変数 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;&amp;lt;math&amp;gt;X_{j_1}, X_{j_2}, \ldots, X_{j_{t_j}}&amp;lt;/math&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$ &lt;/del&gt;に対する &amp;lt;math&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;t_j&amp;lt;/math&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$ &lt;/del&gt;項制約であり,これらの変数が同時にとることのできる値の組の集合である.ここで, すべての制約を満たす値の組&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;&amp;lt;math&amp;gt;(d_1, d_2, \ldots, d_n) \in D_1 \times D_2 \times \cdots \times D_n&amp;lt;/math&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;をCSPの解と呼び, (存在するならば) 一つ, あるいはすべての解を求めることがCSPの目的である.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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;で定義される.制約 &amp;lt;math&amp;gt;C_j&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\, &lt;/ins&gt;&amp;lt;/math&amp;gt; は,変数 &amp;lt;math&amp;gt;X_{j_1}, X_{j_2}, \ldots, X_{j_{t_j}}&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\, &lt;/ins&gt;&amp;lt;/math&amp;gt; に対する &amp;lt;math&amp;gt;t_j&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\, &lt;/ins&gt;&amp;lt;/math&amp;gt; 項制約であり,これらの変数が同時にとることのできる値の組の集合である.ここで, すべての制約を満たす値の組&amp;lt;math&amp;gt;(d_1, d_2, \ldots, d_n) \in D_1 \times D_2 \times \cdots \times D_n&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\, &lt;/ins&gt;&amp;lt;/math&amp;gt;をCSPの解と呼び, (存在するならば) 一つ, あるいはすべての解を求めることがCSPの目的である.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;　なお, 人為的に新たな変数を加えることで,多項制約を複数の二項制約で記述することができ,制約を二項制約に限定した形で定式化することも多く, 二項CSP (binary CSP) と呼ばれる.また, 上の定義では, 制約は値の組の集合で与えられるが, それらすべてを陽に記述する必要はなく,等式や論理式などを用いて表現することもできる.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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;　なお, 人為的に新たな変数を加えることで,多項制約を複数の二項制約で記述することができ,制約を二項制約に限定した形で定式化することも多く, 二項CSP (binary CSP) と呼ばれる.また, 上の定義では, 制約は値の組の集合で与えられるが, それらすべてを陽に記述する必要はなく,等式や論理式などを用いて表現することもできる.&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-l13&quot; &gt;13行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;13行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;　CSPの高い定式化能力を活かして汎用問題解決器 (general problem solver) の開発が可能である.すなわち, 与えられた問題をCSPとして定式化し, その解を求めることで元の問題を解くことができる.この考えは[[制約プログラミング]]に通ずるものである. 制約プログラミングでは, 制約充足はシステムが行うものとし, それゆえ, 制約を記述することのみがプログラマ (ユーザ) の仕事であり, それ自体がプログラミングと考えられる [1].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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;　CSPの高い定式化能力を活かして汎用問題解決器 (general problem solver) の開発が可能である.すなわち, 与えられた問題をCSPとして定式化し, その解を求めることで元の問題を解くことができる.この考えは[[制約プログラミング]]に通ずるものである. 制約プログラミングでは, 制約充足はシステムが行うものとし, それゆえ, 制約を記述することのみがプログラマ (ユーザ) の仕事であり, それ自体がプログラミングと考えられる [1].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;　CSPの解法としては,バックトラッキング法 (backtracking method) が代表的である. これは制約違反が起こらないように, ある順序に従って, 変数への値の割当てを順次行っていく方法であり, 木探索 (tree search) とも呼ばれる.変数に値を割当てる際, すべての制約を満たす値が存在しなければ, 一つ前の変数に戻ってその値を取消し, 他の値を試みる (バックトラック) という操作を繰り返す. この方法により, CSPを厳密に解くことが可能であるが, バックトラックが頻繁に発生する場合には効率的ではない. そこで, 木探索を効率的に行うための手法が種々提案されている. フォワードチェッキング (forward checking) は, 変数に値を割当てる度に, まだ値が割当てられていない変数の値域から, 制約に矛盾する値を予め削除しておく方法である. このとき, ある変数の値域が空になれば, 木探索を進めることなく, 現在の割当てが解の一部とはなり得ないと結論づけられる. このように, 制約に矛盾する値を変数の値域から削除する方法は, 一般に[[制約伝播]] (constraint propagation) と呼ばれ, 問題縮小のための前処理としても用いられる. また, バックジャンピング (backjumping) では, 木探索において変数に値を割当てる際, そのすべての値が, 変数 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;&amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$ &lt;/del&gt;以前に値が割当てられた変数と制約矛盾を起こす場合, 一つ前の変数に戻るのではなく, 変数 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;&amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$ &lt;/del&gt;まで戻ってその値を変更する. いずれも無駄な探索を防ぐために枝刈りを行うものであり, この他, バックマーキング (backmarking) やバックチェッキング (backchecking) などの手法が提案されている. また, バックトラックの数は, 値を割当てる変数の順序や変数に割当てる値の順序に依存する. これらの順序を発見的手法を用いて定める方法も提案されている [3].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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;　CSPの解法としては,バックトラッキング法 (backtracking method) が代表的である. これは制約違反が起こらないように, ある順序に従って, 変数への値の割当てを順次行っていく方法であり, 木探索 (tree search) とも呼ばれる.変数に値を割当てる際, すべての制約を満たす値が存在しなければ, 一つ前の変数に戻ってその値を取消し, 他の値を試みる (バックトラック) という操作を繰り返す. この方法により, CSPを厳密に解くことが可能であるが, バックトラックが頻繁に発生する場合には効率的ではない. そこで, 木探索を効率的に行うための手法が種々提案されている. フォワードチェッキング (forward checking) は, 変数に値を割当てる度に, まだ値が割当てられていない変数の値域から, 制約に矛盾する値を予め削除しておく方法である. このとき, ある変数の値域が空になれば, 木探索を進めることなく, 現在の割当てが解の一部とはなり得ないと結論づけられる. このように, 制約に矛盾する値を変数の値域から削除する方法は, 一般に[[制約伝播]] (constraint propagation) と呼ばれ, 問題縮小のための前処理としても用いられる. また, バックジャンピング (backjumping) では, 木探索において変数に値を割当てる際, そのすべての値が, 変数 &amp;lt;math&amp;gt;X&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\, &lt;/ins&gt;&amp;lt;/math&amp;gt; 以前に値が割当てられた変数と制約矛盾を起こす場合, 一つ前の変数に戻るのではなく, 変数 &amp;lt;math&amp;gt;X&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\, &lt;/ins&gt;&amp;lt;/math&amp;gt; まで戻ってその値を変更する. いずれも無駄な探索を防ぐために枝刈りを行うものであり, この他, バックマーキング (backmarking) やバックチェッキング (backchecking) などの手法が提案されている. また, バックトラックの数は, 値を割当てる変数の順序や変数に割当てる値の順序に依存する. これらの順序を発見的手法を用いて定める方法も提案されている [3].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;　上述の手法を用いることにより, 多少の探索の効率化が可能であるが, CSPが解を持つかどうかを決定する問題はNP完全であり, 多項式時間でCSPを(厳密に)解くアルゴリズムは存在しないと考えられる. そこで, バックトラックなしの木探索で(すなわち多項式時間で)解を一つ求めることができるCSPの部分クラスが,&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;&amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;-整合 (&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;&amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;-consistency) や &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;&amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;-木 (&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;&amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;-tree) といった概念を用いて定義されている [2, 3].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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;　上述の手法を用いることにより, 多少の探索の効率化が可能であるが, CSPが解を持つかどうかを決定する問題はNP完全であり, 多項式時間でCSPを(厳密に)解くアルゴリズムは存在しないと考えられる. そこで, バックトラックなしの木探索で(すなわち多項式時間で)解を一つ求めることができるCSPの部分クラスが,&amp;lt;math&amp;gt;k&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\, &lt;/ins&gt;&amp;lt;/math&amp;gt;-整合 (&amp;lt;math&amp;gt;k&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\, &lt;/ins&gt;&amp;lt;/math&amp;gt;-consistency) や &amp;lt;math&amp;gt;k&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\, &lt;/ins&gt;&amp;lt;/math&amp;gt;-木 (&amp;lt;math&amp;gt;k&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\, &lt;/ins&gt;&amp;lt;/math&amp;gt;-tree) といった概念を用いて定義されている [2, 3].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;　CSPに対する[[近似アルゴリズム]]の研究も数多くなされている.その多くは,すべての制約を満たすとは限らない全変数の値の組 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;&amp;lt;math&amp;gt;(d_1, d_2, \ldots, d_n)&amp;lt;/math&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$ &lt;/del&gt;に対して, 値の変更を繰り返していくことで解を求めようとするものであり, 反復改善法 (iterative improvement) や山登り法 (hill climbing method) などと呼ばれている.厳密性は保証されないが, 実用上, 非常に有効であることが計算実験により確かめられている. これらの最も初期のものとしては, MCHC法 (min-conflict hill climbing) が挙げられる. これは,制約に違反している変数を一つ任意に選び, その値を制約違反数が最も少なくなる値に変更するという操作を, どの変数の値を変更しても制約違反数を減らすことができなくなるまで繰り返すものである. もちろんこれだけでは高い性能は望めず, 初期割当てを変えて何度か試行を繰り返すなどの工夫が必要である. ニューラルネットワーク (neural network) による近似解法の研究も比較的古く, 代表的なものとして GENET と呼ばれるものがある. その他多数の手法が提案されており, アニーリング法 (simulated annealing) や遺伝アルゴリズム (genetic algorithm) など, 組合せ最適化問題に対する一般的な枠組みとして近年盛んに研究されている, メタ戦略 (meta-heuristics) の適用も行われている [3].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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;　CSPに対する[[近似アルゴリズム]]の研究も数多くなされている.その多くは,すべての制約を満たすとは限らない全変数の値の組 &amp;lt;math&amp;gt;(d_1, d_2, \ldots, d_n)&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\, &lt;/ins&gt;&amp;lt;/math&amp;gt; に対して, 値の変更を繰り返していくことで解を求めようとするものであり, 反復改善法 (iterative improvement) や山登り法 (hill climbing method) などと呼ばれている.厳密性は保証されないが, 実用上, 非常に有効であることが計算実験により確かめられている. これらの最も初期のものとしては, MCHC法 (min-conflict hill climbing) が挙げられる. これは,制約に違反している変数を一つ任意に選び, その値を制約違反数が最も少なくなる値に変更するという操作を, どの変数の値を変更しても制約違反数を減らすことができなくなるまで繰り返すものである. もちろんこれだけでは高い性能は望めず, 初期割当てを変えて何度か試行を繰り返すなどの工夫が必要である. ニューラルネットワーク (neural network) による近似解法の研究も比較的古く, 代表的なものとして GENET と呼ばれるものがある. その他多数の手法が提案されており, アニーリング法 (simulated annealing) や遺伝アルゴリズム (genetic algorithm) など, 組合せ最適化問題に対する一般的な枠組みとして近年盛んに研究されている, メタ戦略 (meta-heuristics) の適用も行われている [3].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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 satisfaction optimization problem, CSOP) は, 解 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;&amp;lt;math&amp;gt;(d_1, d_2, \ldots,&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$ $&lt;/del&gt;d_n) \in S&amp;lt;/math&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$ &lt;/del&gt;に対してその評価値を定める関数 &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;&amp;lt;math&amp;gt;f: S \rightarrow Z&amp;lt;/math&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$ &lt;/del&gt;が与えられ, それを最小化(あるいは最大化)する問題である(ここで, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;&amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$ &lt;/del&gt;は解集合, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$&lt;/del&gt;&amp;lt;math&amp;gt;Z&amp;lt;/math&amp;gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$ &lt;/del&gt;は整数集合). CSOPはCSPの拡張であり, スケジューリング問題など多くの現実問題を含む. CSOPの厳密解法としては, 分枝限定法が一般的である. 基本的には CSP のバックトラッキング法と同じであり, 無駄な探索を省くため, いかに効率良く枝刈りを行うかが重要となる.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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 satisfaction optimization problem, CSOP) は, 解 &amp;lt;math&amp;gt;(d_1, d_2, \ldots, d_n) \in S&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\, &lt;/ins&gt;&amp;lt;/math&amp;gt; に対してその評価値を定める関数 &amp;lt;math&amp;gt;f: S \rightarrow Z&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\, &lt;/ins&gt;&amp;lt;/math&amp;gt; が与えられ, それを最小化(あるいは最大化)する問題である(ここで, &amp;lt;math&amp;gt;S&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\, &lt;/ins&gt;&amp;lt;/math&amp;gt; は解集合, &amp;lt;math&amp;gt;Z&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\, &lt;/ins&gt;&amp;lt;/math&amp;gt; は整数集合). CSOPはCSPの拡張であり, スケジューリング問題など多くの現実問題を含む. CSOPの厳密解法としては, 分枝限定法が一般的である. 基本的には CSP のバックトラッキング法と同じであり, 無駄な探索を省くため, いかに効率良く枝刈りを行うかが重要となる.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>122.26.167.76</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E5%88%B6%E7%B4%84%E5%85%85%E8%B6%B3%E5%95%8F%E9%A1%8C%E3%80%8B&amp;diff=1898&amp;oldid=prev</id>
		<title>2007年7月7日 (土) 02:30に122.26.167.76による</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E5%88%B6%E7%B4%84%E5%85%85%E8%B6%B3%E5%95%8F%E9%A1%8C%E3%80%8B&amp;diff=1898&amp;oldid=prev"/>
		<updated>2007-07-07T02:30:39Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&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;ja&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← 古い版&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;2007年7月7日 (土) 02:30時点における版&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;1行目:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;1行目:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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 satisfaction problem) 】'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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 satisfaction problem) 】'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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 satisfaction problem, CSP) は,一般に, $n$ 個の変数 $X_i$ $(i = 1, 2, \ldots, n)$と各変数 $X_i$ がとり得る有限個の値から成る領域 $D_i$,及び $m$個の制約&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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 satisfaction problem, CSP) は,一般に, $&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;math&amp;gt;&lt;/ins&gt;n&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/math&amp;gt;&lt;/ins&gt;$ 個の変数 $&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;math&amp;gt;&lt;/ins&gt;X_i&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/math&amp;gt;&lt;/ins&gt;$ $&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;math&amp;gt;&lt;/ins&gt;(i = 1, 2, \ldots, n)&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/math&amp;gt;&lt;/ins&gt;$と各変数 &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;math&amp;gt;&lt;/ins&gt;$X_i&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/math&amp;gt;&lt;/ins&gt;$ がとり得る有限個の値から成る領域 $&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;math&amp;gt;&lt;/ins&gt;D_i$&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/math&amp;gt;&lt;/ins&gt;,及び $&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;math&amp;gt;&lt;/ins&gt;m&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/math&amp;gt;&lt;/ins&gt;$個の制約&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;   C_j(X_{j_1},X_{j_2}, \ldots, X_{j_{t_j}})   \subseteq D_{j_1} \times D_{j_2} \times \cdots \times D_{j_{t_j}}  (j = 1, 2, \ldots, m)&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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 class=&quot;diffchange diffchange-inline&quot;&gt;で定義される.制約 $&lt;/del&gt;C_j&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$ は,変数 $&lt;/del&gt;X_{j_1}, X_{j_2}, \ldots, X_{j_{t_j}}&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;$ に対する $t_j$ 項制約であり,これらの変数が同時にとることのできる値の組の集合である.ここで, すべての制約を満たす値の組$(d_1, d_2, \ldots, d_n&lt;/del&gt;) \&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;in D_1 &lt;/del&gt;\times &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;D_2 &lt;/del&gt;\times \cdots \times &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;D_n$をCSPの解と呼び&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;(存在するならば&lt;/del&gt;) &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;一つ, あるいはすべての解を求めることがCSPの目的である.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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 class=&quot;diffchange diffchange-inline&quot;&gt;:&amp;lt;math&amp;gt;&lt;/ins&gt;C_j&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;(&lt;/ins&gt;X_{j_1},X_{j_2}, \ldots, X_{j_{t_j}}) &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;  &lt;/ins&gt;\&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;subseteq D_{j_1} &lt;/ins&gt;\times &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;D_{j_2} &lt;/ins&gt;\times \cdots \times &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;D_{j_{t_j}}  (j = 1, 2&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\ldots, m&lt;/ins&gt;)&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/math&amp;gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;　なお, 人為的に新たな変数を加えることで,多項制約を複数の二項制約で記述することができ,制約を二項制約に限定した形で定式化することも多く,二項CSP (binary CSP) と呼ばれる.また, 上の定義では, 制約は値の組の集合で与えられるが,それらすべてを陽に記述する必要はなく,等式や論理式などを用いて表現することもできる.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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 class=&quot;diffchange diffchange-inline&quot;&gt;　CSPの高い定式化能力を活かして汎用問題解決器 (general problem solver) の開発が可能である&lt;/del&gt;.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;すなわち&lt;/del&gt;,&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;与えられた問題をCSPとして定式化し&lt;/del&gt;,&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;その解を求めることで元の問題を解くことができる&lt;/del&gt;.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;この考えは[[制約プログラミング]]に通ずるものである.制約プログラミングでは&lt;/del&gt;,&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;制約充足はシステムが行うものとし&lt;/del&gt;,&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;それゆえ&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;制約を記述することのみがプログラマ &lt;/del&gt;(&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;ユーザ&lt;/del&gt;) &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;の仕事であり&lt;/del&gt;,&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;それ自体がプログラミングと考えられる [1]&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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 class=&quot;diffchange diffchange-inline&quot;&gt;で定義される&lt;/ins&gt;.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;制約 $&amp;lt;math&amp;gt;C_j&amp;lt;/math&amp;gt;$ は,変数 $&amp;lt;math&amp;gt;X_{j_1}, X_{j_2}, \ldots&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;X_{j_{t_j}}&amp;lt;/math&amp;gt;$ に対する &amp;lt;math&amp;gt;$t_j&amp;lt;/math&amp;gt;$ 項制約であり&lt;/ins&gt;,&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;これらの変数が同時にとることのできる値の組の集合である&lt;/ins&gt;.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ここで, すべての制約を満たす値の組$&amp;lt;math&amp;gt;(d_1, d_2&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;\ldots&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;d_n) \in D_1 \times D_2 \times \cdots \times D_n&amp;lt;/math&amp;gt;$をCSPの解と呼び&lt;/ins&gt;, (&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;存在するならば&lt;/ins&gt;) &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;一つ&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;あるいはすべての解を求めることがCSPの目的である&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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 class=&quot;diffchange diffchange-inline&quot;&gt;　CSPの解法としては&lt;/del&gt;,&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;バックトラッキング法 (backtracking method) が代表的である.これは制約違反が起こらないように,ある順序に従って, 変数への値の割当てを順次行っていく方法であり,木探索 (tree search) とも呼ばれる.変数に値を割当てる際&lt;/del&gt;,&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;すべての制約を満たす値が存在しなければ&lt;/del&gt;,&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;一つ前の変数に戻ってその値を取消し&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;他の値を試みる &lt;/del&gt;(&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;バックトラック&lt;/del&gt;) &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;という操作を繰り返す。この方法により, CSPを厳密に解くことが可能であるが,バックトラックが頻繁に発生する場合には効率的ではない.そこで, 木探索を効率的に行うための手法が種々提案されている.フォワードチェッキング (forward checking) は,変数に値を割当てる度に,まだ値が割当てられていない変数の値域から,制約に矛盾する値を予め削除しておく方法である.このとき, ある変数の値域が空になれば,木探索を進めることなく, 現在の割当てが解の一部とはなり得ないと結論づけられる.このように, 制約に矛盾する値を変数の値域から削除する方法は,一般に[[制約伝播]] (constraint propagation) と呼ばれ,問題縮小のための前処理としても用いられる&lt;/del&gt;.また, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;バックジャンピング (backjumping) では&lt;/del&gt;,&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;木探索において変数に値を割当てる際&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;そのすべての値が,変数 $X$ 以前に値が割当てられた変数と制約矛盾を起こす場合,一つ前の変数に戻るのではなく, 変数 $X$ まで戻ってその値を変更する.いずれも無駄な探索を防ぐために枝刈りを行うものであり,この他, バックマーキング (backmarking) やバックチェッキング (backchecking) などの手法が提案されている.また, バックトラックの数は,値を割当てる変数の順序や変数に割当てる値の順序に依存する.これらの順序を発見的手法を用いて定める方法も提案されている [3].&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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 class=&quot;diffchange diffchange-inline&quot;&gt;　なお&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;人為的に新たな変数を加えることで&lt;/ins&gt;,&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;多項制約を複数の二項制約で記述することができ&lt;/ins&gt;,&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;制約を二項制約に限定した形で定式化することも多く&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;二項CSP &lt;/ins&gt;(&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;binary CSP&lt;/ins&gt;) &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;と呼ばれる&lt;/ins&gt;.また, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;上の定義では&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;制約は値の組の集合で与えられるが&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;それらすべてを陽に記述する必要はなく&lt;/ins&gt;,&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;等式や論理式などを用いて表現することもできる&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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 class=&quot;diffchange diffchange-inline&quot;&gt;　上述の手法を用いることにより,多少の探索の効率化が可能であるが,CSPが解を持つかどうかを決定する問題はNP完全であり,多項式時間でCSPを(厳密に)解くアルゴリズムは存在しないと考えられる.そこで, バックトラックなしの木探索で(すなわち多項式時間で)解を一つ求めることができるCSPの部分クラスが,$k$-整合 ($k$-consistency) や $k$-木 ($k$-tree) といった概念を用いて定義されている [2&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;3]&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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 class=&quot;diffchange diffchange-inline&quot;&gt;　CSPに対する[[近似アルゴリズム]]の研究も数多くなされている.その多くは,すべての制約を満たすとは限らない全変数の値の組 $(d_1, d_2, \ldots, d_n)$ に対して,値の変更を繰り返していくことで解を求めようとするものであり,反復改善法 &lt;/del&gt;(&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;iterative improvement&lt;/del&gt;) &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;や山登り法 (hill climbing method) などと呼ばれている&lt;/del&gt;.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;厳密性は保証されないが&lt;/del&gt;,&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;実用上&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;非常に有効であることが計算実験により確かめられている&lt;/del&gt;.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;これらの最も初期のものとしては,MCHC法 (min-conflict hill climbing) が挙げられる&lt;/del&gt;.&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;これは&lt;/del&gt;,&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;制約に違反している変数を一つ任意に選び&lt;/del&gt;, &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;その値を制約違反数が最も少なくなる値に変更するという操作を&lt;/del&gt;,&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;どの変数の値を変更しても制約違反数を減らすことができなくなるまで繰り返すものである.もちろんこれだけでは高い性能は望めず,初期割当てを変えて何度か試行を繰り返すなどの工夫が必要である.ニューラルネットワーク &lt;/del&gt;(&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;neural network&lt;/del&gt;) &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;による近似解法の研究も比較的古く,代表的なものとして GENET と呼ばれるものがある.その他多数の手法が提案されており&lt;/del&gt;,&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;アニーリング法 (simulated annealing) や遺伝アルゴリズム (genetic algorithm) など,組合せ最適化問題に対する一般的な枠組みとして近年盛んに研究されている,メタ戦略 (meta-heuristics) の適用も行われている &lt;/del&gt;[&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;3&lt;/del&gt;].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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 class=&quot;diffchange diffchange-inline&quot;&gt;　CSPの高い定式化能力を活かして汎用問題解決器 &lt;/ins&gt;(&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;general problem solver&lt;/ins&gt;) &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;の開発が可能である&lt;/ins&gt;.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;すなわち&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;与えられた問題をCSPとして定式化し&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;その解を求めることで元の問題を解くことができる&lt;/ins&gt;.&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;この考えは[[制約プログラミング]]に通ずるものである&lt;/ins&gt;. &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;制約プログラミングでは&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;制約充足はシステムが行うものとし&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;それゆえ&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;制約を記述することのみがプログラマ &lt;/ins&gt;(&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;ユーザ&lt;/ins&gt;) &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;の仕事であり&lt;/ins&gt;, &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;それ自体がプログラミングと考えられる &lt;/ins&gt;[&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;1&lt;/ins&gt;].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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 satisfaction optimization problem, CSOP) は,解 $(d_1, d_2, \ldots,$ $d_n) \in S$ に対してその評価値を定める関数 $f: S \rightarrow Z$ が与えられ,それを最小化(あるいは最大化)する問題である(ここで, $S$ は解集合, $Z$ は整数集合).CSOPはCSPの拡張であり,スケジューリング問題など多くの現実問題を含む.CSOPの厳密解法としては, 分枝限定法が一般的である.基本的には CSP のバックトラッキング法と同じであり,無駄な探索を省くため, いかに効率良く枝刈りを行うかが重要となる.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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 class=&quot;diffchange diffchange-inline&quot;&gt;　CSPの解法としては,バックトラッキング法 (backtracking method) が代表的である. これは制約違反が起こらないように, ある順序に従って, 変数への値の割当てを順次行っていく方法であり, 木探索 (tree search) とも呼ばれる.変数に値を割当てる際, すべての制約を満たす値が存在しなければ, 一つ前の変数に戻ってその値を取消し, 他の値を試みる (バックトラック) という操作を繰り返す. この方法により, CSPを厳密に解くことが可能であるが, バックトラックが頻繁に発生する場合には効率的ではない. そこで, 木探索を効率的に行うための手法が種々提案されている. フォワードチェッキング (forward checking) は, 変数に値を割当てる度に, まだ値が割当てられていない変数の値域から, 制約に矛盾する値を予め削除しておく方法である. このとき, ある変数の値域が空になれば, 木探索を進めることなく, 現在の割当てが解の一部とはなり得ないと結論づけられる. このように, 制約に矛盾する値を変数の値域から削除する方法は, 一般に[[制約伝播]] (constraint propagation) と呼ばれ, 問題縮小のための前処理としても用いられる. また, バックジャンピング (backjumping) では, 木探索において変数に値を割当てる際, そのすべての値が, 変数 $&amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;$ 以前に値が割当てられた変数と制約矛盾を起こす場合, 一つ前の変数に戻るのではなく, 変数 $&amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;$ まで戻ってその値を変更する. いずれも無駄な探索を防ぐために枝刈りを行うものであり, この他, バックマーキング (backmarking) やバックチェッキング (backchecking) などの手法が提案されている. また, バックトラックの数は, 値を割当てる変数の順序や変数に割当てる値の順序に依存する. これらの順序を発見的手法を用いて定める方法も提案されている [3].&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&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 class=&quot;diffchange diffchange-inline&quot;&gt;　上述の手法を用いることにより, 多少の探索の効率化が可能であるが, CSPが解を持つかどうかを決定する問題はNP完全であり, 多項式時間でCSPを(厳密に)解くアルゴリズムは存在しないと考えられる. そこで, バックトラックなしの木探索で(すなわち多項式時間で)解を一つ求めることができるCSPの部分クラスが,$&amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;$-整合 ($&amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;$-consistency) や $&amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;$-木 ($&amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;$-tree) といった概念を用いて定義されている [2, 3].&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&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 class=&quot;diffchange diffchange-inline&quot;&gt;　CSPに対する[[近似アルゴリズム]]の研究も数多くなされている.その多くは,すべての制約を満たすとは限らない全変数の値の組 $&amp;lt;math&amp;gt;(d_1, d_2, \ldots, d_n)&amp;lt;/math&amp;gt;$ に対して, 値の変更を繰り返していくことで解を求めようとするものであり, 反復改善法 (iterative improvement) や山登り法 (hill climbing method) などと呼ばれている.厳密性は保証されないが, 実用上, 非常に有効であることが計算実験により確かめられている. これらの最も初期のものとしては, MCHC法 (min-conflict hill climbing) が挙げられる. これは,制約に違反している変数を一つ任意に選び, その値を制約違反数が最も少なくなる値に変更するという操作を, どの変数の値を変更しても制約違反数を減らすことができなくなるまで繰り返すものである. もちろんこれだけでは高い性能は望めず, 初期割当てを変えて何度か試行を繰り返すなどの工夫が必要である. ニューラルネットワーク (neural network) による近似解法の研究も比較的古く, 代表的なものとして GENET と呼ばれるものがある. その他多数の手法が提案されており, アニーリング法 (simulated annealing) や遺伝アルゴリズム (genetic algorithm) など, 組合せ最適化問題に対する一般的な枠組みとして近年盛んに研究されている, メタ戦略 (meta-heuristics) の適用も行われている [3].&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&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;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&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 satisfaction optimization problem, CSOP) は, 解 $&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;math&amp;gt;&lt;/ins&gt;(d_1, d_2, \ldots,$ $d_n) \in S&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/math&amp;gt;&lt;/ins&gt;$ に対してその評価値を定める関数 $&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;math&amp;gt;&lt;/ins&gt;f: S \rightarrow Z&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/math&amp;gt;&lt;/ins&gt;$ が与えられ, それを最小化(あるいは最大化)する問題である(ここで, $&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;math&amp;gt;&lt;/ins&gt;S&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/math&amp;gt;&lt;/ins&gt;$ は解集合, $&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;math&amp;gt;&lt;/ins&gt;Z&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/math&amp;gt;&lt;/ins&gt;$ は整数集合). CSOPはCSPの拡張であり, スケジューリング問題など多くの現実問題を含む. CSOPの厳密解法としては, 分枝限定法が一般的である. 基本的には CSP のバックトラッキング法と同じであり, 無駄な探索を省くため, いかに効率良く枝刈りを行うかが重要となる.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;----&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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;----&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;'''参考文献'''&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&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;'''参考文献'''&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;td class='diff-marker'&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;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>122.26.167.76</name></author>
	</entry>
	<entry>
		<id>https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E5%88%B6%E7%B4%84%E5%85%85%E8%B6%B3%E5%95%8F%E9%A1%8C%E3%80%8B&amp;diff=1800&amp;oldid=prev</id>
		<title>122.26.167.76: 新しいページ: ''''【せいやくじゅうそくもんだい (constraint satisfaction problem) 】'''  　制約充足問題 (constraint satisfaction problem, CSP) は,一般に, $n$ 個...'</title>
		<link rel="alternate" type="text/html" href="https://orsj-ml.org/orwiki/wiki/index.php?title=%E3%80%8A%E5%88%B6%E7%B4%84%E5%85%85%E8%B6%B3%E5%95%8F%E9%A1%8C%E3%80%8B&amp;diff=1800&amp;oldid=prev"/>
		<updated>2007-07-05T09:58:21Z</updated>

		<summary type="html">&lt;p&gt;新しいページ: &amp;#039;&amp;#039;&amp;#039;&amp;#039;【せいやくじゅうそくもんだい (constraint satisfaction problem) 】&amp;#039;&amp;#039;&amp;#039;  　&lt;a href=&quot;/orwiki/wiki/index.php?title=%E5%88%B6%E7%B4%84%E5%85%85%E8%B6%B3%E5%95%8F%E9%A1%8C&quot; title=&quot;制約充足問題&quot;&gt;制約充足問題&lt;/a&gt; (constraint satisfaction problem, CSP) は,一般に, $n$ 個...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新規ページ&lt;/b&gt;&lt;/p&gt;&lt;div&gt;'''【せいやくじゅうそくもんだい (constraint satisfaction problem) 】'''&lt;br /&gt;
&lt;br /&gt;
　[[制約充足問題]] (constraint satisfaction problem, CSP) は,一般に, $n$ 個の変数 $X_i$ $(i = 1, 2, \ldots, n)$と各変数 $X_i$ がとり得る有限個の値から成る領域 $D_i$,及び $m$個の制約&lt;br /&gt;
&lt;br /&gt;
   C_j(X_{j_1},X_{j_2}, \ldots, X_{j_{t_j}})   \subseteq D_{j_1} \times D_{j_2} \times \cdots \times D_{j_{t_j}}  (j = 1, 2, \ldots, m)&lt;br /&gt;
&lt;br /&gt;
で定義される.制約 $C_j$ は,変数 $X_{j_1}, X_{j_2}, \ldots, X_{j_{t_j}}$ に対する $t_j$ 項制約であり,これらの変数が同時にとることのできる値の組の集合である.ここで, すべての制約を満たす値の組$(d_1, d_2, \ldots, d_n) \in D_1 \times D_2 \times \cdots \times D_n$をCSPの解と呼び, (存在するならば) 一つ, あるいはすべての解を求めることがCSPの目的である.&lt;br /&gt;
&lt;br /&gt;
　なお, 人為的に新たな変数を加えることで,多項制約を複数の二項制約で記述することができ,制約を二項制約に限定した形で定式化することも多く,二項CSP (binary CSP) と呼ばれる.また, 上の定義では, 制約は値の組の集合で与えられるが,それらすべてを陽に記述する必要はなく,等式や論理式などを用いて表現することもできる.&lt;br /&gt;
&lt;br /&gt;
　CSPの高い定式化能力を活かして汎用問題解決器 (general problem solver) の開発が可能である.すなわち,与えられた問題をCSPとして定式化し,その解を求めることで元の問題を解くことができる.この考えは[[制約プログラミング]]に通ずるものである.制約プログラミングでは,制約充足はシステムが行うものとし,それゆえ, 制約を記述することのみがプログラマ (ユーザ) の仕事であり,それ自体がプログラミングと考えられる [1].&lt;br /&gt;
&lt;br /&gt;
　CSPの解法としては,バックトラッキング法 (backtracking method) が代表的である.これは制約違反が起こらないように,ある順序に従って, 変数への値の割当てを順次行っていく方法であり,木探索 (tree search) とも呼ばれる.変数に値を割当てる際,すべての制約を満たす値が存在しなければ,一つ前の変数に戻ってその値を取消し, 他の値を試みる (バックトラック) という操作を繰り返す。この方法により, CSPを厳密に解くことが可能であるが,バックトラックが頻繁に発生する場合には効率的ではない.そこで, 木探索を効率的に行うための手法が種々提案されている.フォワードチェッキング (forward checking) は,変数に値を割当てる度に,まだ値が割当てられていない変数の値域から,制約に矛盾する値を予め削除しておく方法である.このとき, ある変数の値域が空になれば,木探索を進めることなく, 現在の割当てが解の一部とはなり得ないと結論づけられる.このように, 制約に矛盾する値を変数の値域から削除する方法は,一般に[[制約伝播]] (constraint propagation) と呼ばれ,問題縮小のための前処理としても用いられる.また, バックジャンピング (backjumping) では,木探索において変数に値を割当てる際, そのすべての値が,変数 $X$ 以前に値が割当てられた変数と制約矛盾を起こす場合,一つ前の変数に戻るのではなく, 変数 $X$ まで戻ってその値を変更する.いずれも無駄な探索を防ぐために枝刈りを行うものであり,この他, バックマーキング (backmarking) やバックチェッキング (backchecking) などの手法が提案されている.また, バックトラックの数は,値を割当てる変数の順序や変数に割当てる値の順序に依存する.これらの順序を発見的手法を用いて定める方法も提案されている [3].&lt;br /&gt;
　上述の手法を用いることにより,多少の探索の効率化が可能であるが,CSPが解を持つかどうかを決定する問題はNP完全であり,多項式時間でCSPを(厳密に)解くアルゴリズムは存在しないと考えられる.そこで, バックトラックなしの木探索で(すなわち多項式時間で)解を一つ求めることができるCSPの部分クラスが,$k$-整合 ($k$-consistency) や $k$-木 ($k$-tree) といった概念を用いて定義されている [2, 3].&lt;br /&gt;
&lt;br /&gt;
　CSPに対する[[近似アルゴリズム]]の研究も数多くなされている.その多くは,すべての制約を満たすとは限らない全変数の値の組 $(d_1, d_2, \ldots, d_n)$ に対して,値の変更を繰り返していくことで解を求めようとするものであり,反復改善法 (iterative improvement) や山登り法 (hill climbing method) などと呼ばれている.厳密性は保証されないが,実用上, 非常に有効であることが計算実験により確かめられている.これらの最も初期のものとしては,MCHC法 (min-conflict hill climbing) が挙げられる.これは,制約に違反している変数を一つ任意に選び, その値を制約違反数が最も少なくなる値に変更するという操作を,どの変数の値を変更しても制約違反数を減らすことができなくなるまで繰り返すものである.もちろんこれだけでは高い性能は望めず,初期割当てを変えて何度か試行を繰り返すなどの工夫が必要である.ニューラルネットワーク (neural network) による近似解法の研究も比較的古く,代表的なものとして GENET と呼ばれるものがある.その他多数の手法が提案されており,アニーリング法 (simulated annealing) や遺伝アルゴリズム (genetic algorithm) など,組合せ最適化問題に対する一般的な枠組みとして近年盛んに研究されている,メタ戦略 (meta-heuristics) の適用も行われている [3].&lt;br /&gt;
&lt;br /&gt;
　制約充足最適化問題 (constraint satisfaction optimization problem, CSOP) は,解 $(d_1, d_2, \ldots,$ $d_n) \in S$ に対してその評価値を定める関数 $f: S \rightarrow Z$ が与えられ,それを最小化(あるいは最大化)する問題である(ここで, $S$ は解集合, $Z$ は整数集合).CSOPはCSPの拡張であり,スケジューリング問題など多くの現実問題を含む.CSOPの厳密解法としては, 分枝限定法が一般的である.基本的には CSP のバックトラッキング法と同じであり,無駄な探索を省くため, いかに効率良く枝刈りを行うかが重要となる.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''参考文献'''&lt;br /&gt;
&lt;br /&gt;
[1] 渕一博 監修, 溝口文雄, 古川康一, J-L. Lassez 編, 『制約論理プログラミング』, 1989.       &lt;br /&gt;
&lt;br /&gt;
[2] 西原清一, 「制約充足問題の基礎と展望」, 『人工知能学会誌』, '''12''' (3) (1997), 351-358.&lt;br /&gt;
&lt;br /&gt;
[3] E. Tsang, ''Foundations of Constraint Satisfaction'', Academic Press, 1993.&lt;/div&gt;</summary>
		<author><name>122.26.167.76</name></author>
	</entry>
</feed>