<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Requiring a group of customers be served by the same facility in Mathematical Optimization, Discrete-Event Simulation, and OR</title>
    <link>https://communities.sas.com/t5/Mathematical-Optimization/Requiring-a-group-of-customers-be-served-by-the-same-facility/m-p/828445#M3795</link>
    <description>&lt;P&gt;In that case, the approach below groups customers into the same facility without requiring sequential ordering of the customer uid.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Without grouping, the model below assigns each customer to one of three facilities to minimize total distance.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data arcs;
input customers $ facilities $ dist;
datalines;
C1 F1 3
C1 F2 2
C1 F3 6
C2 F1 1
C2 F2 4
C2 F3 2
C3 F1 1
C3 F2 2
C3 F3 0
C4 F1 3
C4 F2 2
C4 F3 1
C5 F1 4
C5 F2 1
C5 F3 2
;

proc optmodel;

set &amp;lt;str,str&amp;gt; ARCS;

set CUSTOMERS = setof{&amp;lt;c,f&amp;gt; in ARCS} c;
set FACILITIES = setof{&amp;lt;c,f&amp;gt; in ARCS} f;

num dist{ARCS};

read data arcs into ARCS=[customers facilities] dist;

var Assign{ARCS} binary;

min TotalDistance = sum{&amp;lt;c,f&amp;gt; in ARCS} Assign[c,f] * dist[c,f];

/* each customer is assigned to only one facility */
con one_facility{c in CUSTOMERS}: 
  sum{f in FACILITIES} Assign[c,f] = 1;

solve;

print Assign;

quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;The modifications below force customers C1 &amp;amp; C4 into the same group, and customers C3 &amp;amp; C5 into the same group.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data force;
input i $ j $;
datalines;
C1 C4
C3 C5
;

Inside of OPTMODEL, add:

set &amp;lt;str,str&amp;gt; FORCE;

read data force into FORCE=[i j];

var Group{FORCE,FACILITIES} binary; 

con group_con1{&amp;lt;i,j&amp;gt; in FORCE, f in FACILITIES}:
   Group[i,j,f] = Assign[i,f];

con group_con2{&amp;lt;i,j&amp;gt; in FORCE, f in FACILITIES}:
   Group[i,j,f] = Assign[j,f];&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Fri, 12 Aug 2022 12:21:23 GMT</pubDate>
    <dc:creator>ChanceTGardener</dc:creator>
    <dc:date>2022-08-12T12:21:23Z</dc:date>
    <item>
      <title>Requiring a group of customers be served by the same facility</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/Requiring-a-group-of-customers-be-served-by-the-same-facility/m-p/828200#M3789</link>
      <description>&lt;P&gt;I can't seem to come up with how to write this constraint. I have a list of possible facilities and a list of customers and all possible arcs between customers and facilities. I want a group of customers to be served by the same facility.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;facilities: 1,2,3&lt;/P&gt;
&lt;P&gt;customers: 1,2,3,4,5,6,7,8,9,10&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;customers will be assigned to the closest facility, but customers 2,3, and 4 need to be assigned to the same facility. This seems like it should be simple, but for some reason I cannot get it together.&lt;/P&gt;</description>
      <pubDate>Thu, 11 Aug 2022 01:34:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/Requiring-a-group-of-customers-be-served-by-the-same-facility/m-p/828200#M3789</guid>
      <dc:creator>DanHouston</dc:creator>
      <dc:date>2022-08-11T01:34:50Z</dc:date>
    </item>
    <item>
      <title>Re: Requiring a group of customers be served by the same facility</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/Requiring-a-group-of-customers-be-served-by-the-same-facility/m-p/828207#M3790</link>
      <description>&lt;P&gt;If you have binary decision variables X[i,j] that indicate whether customer i is assigned to facility j, the desired constraints are X[2,j] = X[3,j] and X[2,j] = X[4,j] for all j.&lt;/P&gt;</description>
      <pubDate>Thu, 11 Aug 2022 03:16:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/Requiring-a-group-of-customers-be-served-by-the-same-facility/m-p/828207#M3790</guid>
      <dc:creator>RobPratt</dc:creator>
      <dc:date>2022-08-11T03:16:55Z</dc:date>
    </item>
    <item>
      <title>Re: Requiring a group of customers be served by the same facility</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/Requiring-a-group-of-customers-be-served-by-the-same-facility/m-p/828208#M3791</link>
      <description>&lt;P&gt;Something like:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;con group_con{&amp;lt;i,k&amp;gt; in ARCS2: i in {'1358063','1441229','1441227','1441288','1441275','1441272','1441271','1441267','1441259','1436770','1441256'} and k in {'377','378','379','400','401','402','403','404','405','406','407','408','409','413','414','417','418','425','426','427','471'}}:
Assign2[i,'377']=Assign2[i,k];&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 11 Aug 2022 04:12:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/Requiring-a-group-of-customers-be-served-by-the-same-facility/m-p/828208#M3791</guid>
      <dc:creator>DanHouston</dc:creator>
      <dc:date>2022-08-11T04:12:11Z</dc:date>
    </item>
    <item>
      <title>Re: Requiring a group of customers be served by the same facility</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/Requiring-a-group-of-customers-be-served-by-the-same-facility/m-p/828256#M3792</link>
      <description>Yes, that looks correct if i is a facility and k is a customer.  This constraint enforces Assign2[i,k] = 1 if and only if Assign2[i,’377’] = 1.</description>
      <pubDate>Thu, 11 Aug 2022 12:43:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/Requiring-a-group-of-customers-be-served-by-the-same-facility/m-p/828256#M3792</guid>
      <dc:creator>RobPratt</dc:creator>
      <dc:date>2022-08-11T12:43:10Z</dc:date>
    </item>
    <item>
      <title>Re: Requiring a group of customers be served by the same facility</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/Requiring-a-group-of-customers-be-served-by-the-same-facility/m-p/828301#M3793</link>
      <description>&lt;P&gt;Your real-world use case might be more complex, but if your customer uid's iterate by 1 (e.g., 1..10), and consecutive customers need to be in the same facility (e.g., 2,3,4), this might work:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Below customers 1, 2, and 3 are forced into the same facility through the group_con constraint.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data arcs;
input customers facilities $ dist;
datalines;
1 F1 3
1 F2 2
1 F3 6
2 F1 1
2 F2 4
2 F3 2
3 F1 1
3 F2 2
3 F3 0
4 F1 3
4 F2 2
4 F3 1
5 F1 4
5 F2 1
5 F3 2
;

data force;
input customers;
datalines;
1
2
3
;

proc optmodel;

set &amp;lt;num,str&amp;gt; ARCS;

set CUSTOMERS = setof{&amp;lt;i,j&amp;gt; in ARCS} i;
set FACILITIES = setof{&amp;lt;i,j&amp;gt; in ARCS} j;

set &amp;lt;num&amp;gt; FORCE;

num dist{ARCS};

read data arcs into ARCS=[customers facilities] dist;
read data force into FORCE=[customers];

var Assign{ARCS} binary;

min TotalDistance = sum{&amp;lt;i,j&amp;gt; in ARCS} Assign[i,j]*dist[i,j];

/* each customer is assigned to only one facility */
con one_facility{c in CUSTOMERS}: 
  sum{f in FACILITIES} Assign[c,f] = 1;

/* customers in the FORCE set assigned to the same facility */
con group_con{i in FORCE,j in FACILITIES: i &amp;lt; card(FORCE)}:
     Assign[i,j] = Assign[i+1,j];

solve;

print Assign;

quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 11 Aug 2022 16:12:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/Requiring-a-group-of-customers-be-served-by-the-same-facility/m-p/828301#M3793</guid>
      <dc:creator>ChanceTGardener</dc:creator>
      <dc:date>2022-08-11T16:12:10Z</dc:date>
    </item>
    <item>
      <title>Re: Requiring a group of customers be served by the same facility</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/Requiring-a-group-of-customers-be-served-by-the-same-facility/m-p/828378#M3794</link>
      <description>&lt;P&gt;Thanks for the idea. They may not be consecutive in this case.&lt;/P&gt;</description>
      <pubDate>Thu, 11 Aug 2022 22:03:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/Requiring-a-group-of-customers-be-served-by-the-same-facility/m-p/828378#M3794</guid>
      <dc:creator>DanHouston</dc:creator>
      <dc:date>2022-08-11T22:03:45Z</dc:date>
    </item>
    <item>
      <title>Re: Requiring a group of customers be served by the same facility</title>
      <link>https://communities.sas.com/t5/Mathematical-Optimization/Requiring-a-group-of-customers-be-served-by-the-same-facility/m-p/828445#M3795</link>
      <description>&lt;P&gt;In that case, the approach below groups customers into the same facility without requiring sequential ordering of the customer uid.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Without grouping, the model below assigns each customer to one of three facilities to minimize total distance.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data arcs;
input customers $ facilities $ dist;
datalines;
C1 F1 3
C1 F2 2
C1 F3 6
C2 F1 1
C2 F2 4
C2 F3 2
C3 F1 1
C3 F2 2
C3 F3 0
C4 F1 3
C4 F2 2
C4 F3 1
C5 F1 4
C5 F2 1
C5 F3 2
;

proc optmodel;

set &amp;lt;str,str&amp;gt; ARCS;

set CUSTOMERS = setof{&amp;lt;c,f&amp;gt; in ARCS} c;
set FACILITIES = setof{&amp;lt;c,f&amp;gt; in ARCS} f;

num dist{ARCS};

read data arcs into ARCS=[customers facilities] dist;

var Assign{ARCS} binary;

min TotalDistance = sum{&amp;lt;c,f&amp;gt; in ARCS} Assign[c,f] * dist[c,f];

/* each customer is assigned to only one facility */
con one_facility{c in CUSTOMERS}: 
  sum{f in FACILITIES} Assign[c,f] = 1;

solve;

print Assign;

quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;The modifications below force customers C1 &amp;amp; C4 into the same group, and customers C3 &amp;amp; C5 into the same group.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data force;
input i $ j $;
datalines;
C1 C4
C3 C5
;

Inside of OPTMODEL, add:

set &amp;lt;str,str&amp;gt; FORCE;

read data force into FORCE=[i j];

var Group{FORCE,FACILITIES} binary; 

con group_con1{&amp;lt;i,j&amp;gt; in FORCE, f in FACILITIES}:
   Group[i,j,f] = Assign[i,f];

con group_con2{&amp;lt;i,j&amp;gt; in FORCE, f in FACILITIES}:
   Group[i,j,f] = Assign[j,f];&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 12 Aug 2022 12:21:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/Mathematical-Optimization/Requiring-a-group-of-customers-be-served-by-the-same-facility/m-p/828445#M3795</guid>
      <dc:creator>ChanceTGardener</dc:creator>
      <dc:date>2022-08-12T12:21:23Z</dc:date>
    </item>
  </channel>
</rss>

