<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/156105</link>
    <title>MATLAB Central Newsreader - Logical Rules</title>
    <description>Feed for thread: Logical Rules</description>
    <language>en-us</language>
    <copyright>&amp;copy;1994-2012 by MathWorks, Inc.</copyright>
    <webmaster>webmaster@mathworks.com</webmaster>
    <generator>MATLAB Central Newsreader</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <ttl>60</ttl>
    <image>
      <title>MathWorks</title>
      <url>http://www.mathworks.com/images/membrane_icon.gif</url>
    </image>
    <item>
      <pubDate>Thu, 13 Sep 2007 16:49:42 -0400</pubDate>
      <title>Logical Rules</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/156105#392170</link>
      <author>Christopher Mouton</author>
      <description>I am trying to see if Matlab has a toolbox for something &lt;br&gt;
like this, or where I might look for ideas on how to &lt;br&gt;
efficiently solve the following&lt;br&gt;
&lt;br&gt;
A{1}=[1,2]&lt;br&gt;
A{2}=[2,3]&lt;br&gt;
A{3}=[1,3]&lt;br&gt;
A{4}=[1,2,3,4]&lt;br&gt;
&lt;br&gt;
This reads:&lt;br&gt;
&lt;br&gt;
Position 1 can be 1 or 2&lt;br&gt;
Position 2 can be 2 or 3&lt;br&gt;
Position 3 can be 1 or 3&lt;br&gt;
Position 4 can be 1, 2, 3 or 4&lt;br&gt;
&lt;br&gt;
Given that each number can only be used once, we know that &lt;br&gt;
Position 4 must be 4.&lt;br&gt;
&lt;br&gt;
So my question is, how could I perform such logic in a &lt;br&gt;
general way? Any ideas where I should look?&lt;br&gt;
&lt;br&gt;
Thanks so much.</description>
    </item>
    <item>
      <pubDate>Thu, 13 Sep 2007 17:25:21 -0400</pubDate>
      <title>Re: Logical Rules</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/156105#392181</link>
      <author>dpb</author>
      <description>Christopher Mouton wrote:&lt;br&gt;
&amp;gt; I am trying to see if Matlab has a toolbox for something &lt;br&gt;
&amp;gt; like this, or where I might look for ideas on how to &lt;br&gt;
&amp;gt; efficiently solve the following&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; A{1}=[1,2]&lt;br&gt;
&amp;gt; A{2}=[2,3]&lt;br&gt;
&amp;gt; A{3}=[1,3]&lt;br&gt;
&amp;gt; A{4}=[1,2,3,4]&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; This reads:&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; Position 1 can be 1 or 2&lt;br&gt;
&amp;gt; Position 2 can be 2 or 3&lt;br&gt;
&amp;gt; Position 3 can be 1 or 3&lt;br&gt;
&amp;gt; Position 4 can be 1, 2, 3 or 4&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; Given that each number can only be used once, we know that &lt;br&gt;
&amp;gt; Position 4 must be 4.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; So my question is, how could I perform such logic in a &lt;br&gt;
&amp;gt; general way? Any ideas where I should look?&lt;br&gt;
&lt;br&gt;
unique(), maybe?&lt;br&gt;
&lt;br&gt;
But, strictly speaking, by my reading your example is inconsistent to &lt;br&gt;
start with -- if each value can be used only once, then A(2) would have &lt;br&gt;
to be [3] and then A(3) would have to be []?&lt;br&gt;
&lt;br&gt;
Think need more precise definition of the problem and the expected &lt;br&gt;
solution...&lt;br&gt;
&lt;br&gt;
--</description>
    </item>
    <item>
      <pubDate>Thu, 13 Sep 2007 17:47:43 -0400</pubDate>
      <title>Re: Logical Rules</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/156105#392185</link>
      <author>Kelly Kearney</author>
      <description>&quot;Christopher Mouton&quot; &amp;lt;mouton.no.spam@caltech.edu&amp;gt; wrote in&lt;br&gt;
message &amp;lt;fcbpn6$eo0$1@fred.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; I am trying to see if Matlab has a toolbox for something &lt;br&gt;
&amp;gt; like this, or where I might look for ideas on how to &lt;br&gt;
&amp;gt; efficiently solve the following&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; A{1}=[1,2]&lt;br&gt;
&amp;gt; A{2}=[2,3]&lt;br&gt;
&amp;gt; A{3}=[1,3]&lt;br&gt;
&amp;gt; A{4}=[1,2,3,4]&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; This reads:&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; Position 1 can be 1 or 2&lt;br&gt;
&amp;gt; Position 2 can be 2 or 3&lt;br&gt;
&amp;gt; Position 3 can be 1 or 3&lt;br&gt;
&amp;gt; Position 4 can be 1, 2, 3 or 4&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; Given that each number can only be used once, we know that &lt;br&gt;
&amp;gt; Position 4 must be 4.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; So my question is, how could I perform such logic in a &lt;br&gt;
&amp;gt; general way? Any ideas where I should look?&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; Thanks so much.&lt;br&gt;
&lt;br&gt;
The most straightforward way would be to just form all&lt;br&gt;
combinations possible, then throw out any that don't meet&lt;br&gt;
the uniqueness criteria.&lt;br&gt;
&lt;br&gt;
A{1}=[1,2];&lt;br&gt;
A{2}=[2,3];&lt;br&gt;
A{3}=[1,3];&lt;br&gt;
A{4}=[1,2,3,4];&lt;br&gt;
&lt;br&gt;
combos = [];&lt;br&gt;
for a = A{1}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for b = A{2}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for c = A{3}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for d = A{4}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;temp = [a b c d];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if length(unique(temp)) == 4&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;combos = [combos;temp];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end      &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end&lt;br&gt;
end&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
-Kelly</description>
    </item>
    <item>
      <pubDate>Thu, 13 Sep 2007 17:57:21 -0400</pubDate>
      <title>Re: Logical Rules</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/156105#392187</link>
      <author>Christopher Mouton</author>
      <description>I would expect the solution to be&lt;br&gt;
&lt;br&gt;
A{1}=[1,2]&lt;br&gt;
A{2}=[2,3]&lt;br&gt;
A{3}=[1,3]&lt;br&gt;
A{4}=[4]</description>
    </item>
    <item>
      <pubDate>Thu, 13 Sep 2007 17:58:20 -0400</pubDate>
      <title>Re: Logical Rules</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/156105#392188</link>
      <author>Christopher Mouton</author>
      <description>This would definitely work for this example.&lt;br&gt;
&lt;br&gt;
But now I would like to be able to find much larger sets. &lt;br&gt;
In particular A{1...256}, so it will require something &lt;br&gt;
smart.</description>
    </item>
    <item>
      <pubDate>Thu, 13 Sep 2007 18:00:51 -0400</pubDate>
      <title>Re: Logical Rules</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/156105#392190</link>
      <author>dpb</author>
      <description>Christopher Mouton wrote:&lt;br&gt;
&amp;gt; I would expect the solution to be&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; A{1}=[1,2]&lt;br&gt;
&amp;gt; A{2}=[2,3]&lt;br&gt;
&amp;gt; A{3}=[1,3]&lt;br&gt;
&amp;gt; A{4}=[4]&lt;br&gt;
&lt;br&gt;
Oh?  Why?  Then &quot;used only once&quot; means something different than used &lt;br&gt;
only once.  The answer to that would perhaps lead the &quot;something clever&quot; &lt;br&gt;
solution...&lt;br&gt;
&lt;br&gt;
Maybe I'm just dense today (some say every day :) ), but I don't yet see &lt;br&gt;
the general rule...&lt;br&gt;
&lt;br&gt;
--</description>
    </item>
    <item>
      <pubDate>Thu, 13 Sep 2007 18:07:46 -0400</pubDate>
      <title>Re: Logical Rules</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/156105#392193</link>
      <author>Christopher Mouton</author>
      <description>I hope I am not being stupid. Here are the two possible &lt;br&gt;
solutions:&lt;br&gt;
&lt;br&gt;
A{1}=[1]&lt;br&gt;
A{2}=[2]&lt;br&gt;
A{3}=[3]&lt;br&gt;
A{4}=[4]&lt;br&gt;
&lt;br&gt;
A{1}=[2]&lt;br&gt;
A{2}=[3]&lt;br&gt;
A{3}=[1]&lt;br&gt;
A{4}=[4]&lt;br&gt;
&lt;br&gt;
Thanks.</description>
    </item>
    <item>
      <pubDate>Thu, 13 Sep 2007 18:48:06 -0400</pubDate>
      <title>Re: Logical Rules</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/156105#392201</link>
      <author>dpb</author>
      <description>Christopher Mouton wrote:&lt;br&gt;
&amp;gt; I hope I am not being stupid. Here are the two possible &lt;br&gt;
&amp;gt; solutions:&lt;br&gt;
...&lt;br&gt;
&lt;br&gt;
Oh, oops!  I got my eyes crossed somehow... :(&lt;br&gt;
&lt;br&gt;
But, sorry, I've no cleverer ideas.  Not my area, but would some of the &lt;br&gt;
genetics-related pattern matching have any bearing here for tricks?&lt;br&gt;
&lt;br&gt;
--</description>
    </item>
    <item>
      <pubDate>Thu, 13 Sep 2007 18:57:00 -0400</pubDate>
      <title>Re: Logical Rules</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/156105#392204</link>
      <author> &quot;J.N.</author>
      <description>On Sep 13, 12:49 pm, &quot;Christopher Mouton&quot; &amp;lt;mouton.no.s...@caltech.edu&amp;gt;&lt;br&gt;
wrote:&lt;br&gt;
&amp;gt; I am trying to see if Matlab has a toolbox for something&lt;br&gt;
&amp;gt; like this, or where I might look for ideas on how to&lt;br&gt;
&amp;gt; efficiently solve the following&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; A{1}=[1,2]&lt;br&gt;
&amp;gt; A{2}=[2,3]&lt;br&gt;
&amp;gt; A{3}=[1,3]&lt;br&gt;
&amp;gt; A{4}=[1,2,3,4]&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; This reads:&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Position 1 can be 1 or 2&lt;br&gt;
&amp;gt; Position 2 can be 2 or 3&lt;br&gt;
&amp;gt; Position 3 can be 1 or 3&lt;br&gt;
&amp;gt; Position 4 can be 1, 2, 3 or 4&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Given that each number can only be used once, we know that&lt;br&gt;
&amp;gt; Position 4 must be 4.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; So my question is, how could I perform such logic in a&lt;br&gt;
&amp;gt; general way? Any ideas where I should look?&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Thanks so much.&lt;br&gt;
&lt;br&gt;
This is called an Assignment Problem:&lt;br&gt;
&lt;a href=&quot;http://en.wikipedia.org/wiki/Assignment_problem&quot;&gt;http://en.wikipedia.org/wiki/Assignment_problem&lt;/a&gt;&lt;br&gt;
&lt;br&gt;
You are essentially trying to assign a set of entities {1,2,...,n} to&lt;br&gt;
a set of slots {A1,A2,...,An}, with constraints that state that a slot&lt;br&gt;
Ai is able to accept only a subset of the entities.&lt;br&gt;
&lt;br&gt;
One way to model this is to create a n x n logical variable L (with&lt;br&gt;
slots as rows and entities as columns) such that L(i,j) = true iff&lt;br&gt;
entity j can be assigned to slot Ai.&lt;br&gt;
&lt;br&gt;
hth&lt;br&gt;
&lt;br&gt;
J.N.</description>
    </item>
    <item>
      <pubDate>Thu, 13 Sep 2007 20:03:30 -0400</pubDate>
      <title>Re: Logical Rules</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/156105#392221</link>
      <author> Randy Poe</author>
      <description>On Sep 13, 2:57 pm, &quot;J.N.&quot; &amp;lt;joao.nat...@gmail.com&amp;gt; wrote:&lt;br&gt;
&amp;gt; On Sep 13, 12:49 pm, &quot;Christopher Mouton&quot; &amp;lt;mouton.no.s...@caltech.edu&amp;gt;&lt;br&gt;
&amp;gt; wrote:&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; I am trying to see if Matlab has a toolbox for something&lt;br&gt;
&amp;gt; &amp;gt; like this, or where I might look for ideas on how to&lt;br&gt;
&amp;gt; &amp;gt; efficiently solve the following&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; A{1}=[1,2]&lt;br&gt;
&amp;gt; &amp;gt; A{2}=[2,3]&lt;br&gt;
&amp;gt; &amp;gt; A{3}=[1,3]&lt;br&gt;
&amp;gt; &amp;gt; A{4}=[1,2,3,4]&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; This reads:&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; Position 1 can be 1 or 2&lt;br&gt;
&amp;gt; &amp;gt; Position 2 can be 2 or 3&lt;br&gt;
&amp;gt; &amp;gt; Position 3 can be 1 or 3&lt;br&gt;
&amp;gt; &amp;gt; Position 4 can be 1, 2, 3 or 4&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; Given that each number can only be used once, we know that&lt;br&gt;
&amp;gt; &amp;gt; Position 4 must be 4.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; So my question is, how could I perform such logic in a&lt;br&gt;
&amp;gt; &amp;gt; general way? Any ideas where I should look?&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; Thanks so much.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; This is called an Assignment Problem:&lt;a href=&quot;http://en.wikipedia.org/wiki/Assignment_problem&quot;&gt;http://en.wikipedia.org/wiki/Assignment_problem&lt;/a&gt;&lt;br&gt;
&amp;gt;&lt;br&gt;
&lt;br&gt;
Hmm. There are some problems on that page, mainly the&lt;br&gt;
misuse of the term &quot;Linear Program&quot; which normally refers&lt;br&gt;
to problems in which the variables can be any (positive)&lt;br&gt;
real, not restricted to integers.&lt;br&gt;
&lt;br&gt;
&amp;gt; You are essentially trying to assign a set of entities {1,2,...,n} to&lt;br&gt;
&amp;gt; a set of slots {A1,A2,...,An}, with constraints that state that a slot&lt;br&gt;
&amp;gt; Ai is able to accept only a subset of the entities.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; One way to model this is to create a n x n logical variable L (with&lt;br&gt;
&amp;gt; slots as rows and entities as columns) such that L(i,j) = true iff&lt;br&gt;
&amp;gt; entity j can be assigned to slot Ai.&lt;br&gt;
&lt;br&gt;
Yes, the Wiki page describes the setup as an LP with these&lt;br&gt;
n^2 variables. At n=256, that's not an unwieldy problem, but&lt;br&gt;
you can see that it doesn't take much for such a problem to&lt;br&gt;
get too large to fit in memory.&lt;br&gt;
&lt;br&gt;
If you relax the requirement that the L(i,j) be integers, then&lt;br&gt;
you do actually have a standard linear program and you can&lt;br&gt;
use fast LP solving algorithms to solve it (this is called an&lt;br&gt;
&quot;LP relaxation&quot;). The Optimization Toolbox includes one called&lt;br&gt;
LINPROG.&lt;br&gt;
&lt;br&gt;
Then you have to decide what to do with fractional values,&lt;br&gt;
but usually some rounding scheme works and often&lt;br&gt;
gives you a pretty good solution, though only in&lt;br&gt;
special cases is that solution guaranteed optimal.&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;- Randy</description>
    </item>
  </channel>
</rss>

