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!
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
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.