Could someone help me figure out how to add a constraint that requires at least one of adwords 3,5,7 to be bought?
Also how to force the model to never buy adword 35?
Thank you in advance!
proc optmodel;
set ADWORDS = 1..100;
num cost_per_click{ADWORDS} = ranuni(123);
num clicks{ADWORDS} = ranuni(567);
num conversions{ADWORDS} = ranuni(789);
num revperconversion=10;
var buy{ADWORDS} >=0;
max effectiveness =sum{a in ADWORDS}((revperconversion*conversions[a])-(clicks[a]*cost_per_click[a]))*buy[a];
con buyAtMost50: sum{a in ADWORDS}buy[a]<=50;
con buyAtMostOfEven: sum{a in ADWORDS: mod(a,2) = 0}buy[a]<=10;
con buyAtMostOfOdd: sum{a in ADWORDS: mod(a,1) = 0}buy[a]<=20;
solve;
Quit;
First a correction to your constraint:
con buyAtMostOfOdd: sum{a in ADWORDS: mod(a,2) = 1}buy[a]<=20;
Now here is a way to force 3, 5, 7:
con AtLeastOne357: sum {a in {3,5,7}} buy[a] >= 1;
And here are four alternative ways to avoid 35.
Explicit constraint:
con No35: buy[35] = 0;
Fixed variable:
fix buy[35] = 0;
Change index set declaration:
set ADWORDS = 1..100 diff {35};
Modify index set after declaration:
set ADWORDS init 1..100;
ADWORDS = ADWORDS diff {35};
First a correction to your constraint:
con buyAtMostOfOdd: sum{a in ADWORDS: mod(a,2) = 1}buy[a]<=20;
Now here is a way to force 3, 5, 7:
con AtLeastOne357: sum {a in {3,5,7}} buy[a] >= 1;
And here are four alternative ways to avoid 35.
Explicit constraint:
con No35: buy[35] = 0;
Fixed variable:
fix buy[35] = 0;
Change index set declaration:
set ADWORDS = 1..100 diff {35};
Modify index set after declaration:
set ADWORDS init 1..100;
ADWORDS = ADWORDS diff {35};
Thank you again!
Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!
Learn how to run multiple linear regression models with and without interactions, presented by SAS user Alex Chaplin.
Find more tutorials on the SAS Users YouTube channel.