BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
SAScowboy
Fluorite | Level 6

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;

1 ACCEPTED SOLUTION

Accepted Solutions
RobPratt
SAS Super FREQ

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};

View solution in original post

2 REPLIES 2
RobPratt
SAS Super FREQ

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};
SAScowboy
Fluorite | Level 6

Thank you again! 

SAS Innovate 2025: Register Now

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!

Multiple Linear Regression in SAS

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.

Discussion stats
  • 2 replies
  • 699 views
  • 1 like
  • 2 in conversation