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

Hi,

I'm not sure if it's the right forum to ask any question related to sasoptpy here.Please delete it if it's not the right forum

I'm doing optimization in python using sasoptpy.My objective function looks like z=(a*p+q*b)*c. where all of these variables are columns of a data frame.

a,p,q,b are my variables & c is constant.

I'm defining a,b,p,q in following way  va=m.add_variable(a, name='va',lb=LB2,ub=UB2). But not sure how to define constant c. Can you please suggest.

 

1 ACCEPTED SOLUTION

Accepted Solutions
sertalpb
SAS Employee

Hi,

 

Constants are defined as regular Python values (floats or integers), such as

c = 5

and can be used in expressions.

 

If you would like to use the value in dataframe, you can access the actual value as:

c = df.at[0, 'c']

 

Here's a full example:

import pandas as pd

# Define dataframe
df = pd.DataFrame([[4, 5, 6]], columns=['a', 'b', 'c'])

# Define model
m = so.Model(name='model1', session=None)

# Get columns
a = df['a']
b = df['b']
c = df.at[0, 'c']

# Define variables
va = m.add_variables(a.index.tolist(), name='va')
vb = m.add_variables(b.index.tolist(), name='vb')

# Set objective
obj = m.set_objective((va.mult(a) + vb.mult(b)) * c, name='obj')

# Print the objective function
print(m.get_objective())

This will print the objective function as

 

24 * va[0] + 30 * vb[0]

If this doesn't solve your problem, could you provide a minimal working example?

View solution in original post

1 REPLY 1
sertalpb
SAS Employee

Hi,

 

Constants are defined as regular Python values (floats or integers), such as

c = 5

and can be used in expressions.

 

If you would like to use the value in dataframe, you can access the actual value as:

c = df.at[0, 'c']

 

Here's a full example:

import pandas as pd

# Define dataframe
df = pd.DataFrame([[4, 5, 6]], columns=['a', 'b', 'c'])

# Define model
m = so.Model(name='model1', session=None)

# Get columns
a = df['a']
b = df['b']
c = df.at[0, 'c']

# Define variables
va = m.add_variables(a.index.tolist(), name='va')
vb = m.add_variables(b.index.tolist(), name='vb')

# Set objective
obj = m.set_objective((va.mult(a) + vb.mult(b)) * c, name='obj')

# Print the objective function
print(m.get_objective())

This will print the objective function as

 

24 * va[0] + 30 * vb[0]

If this doesn't solve your problem, could you provide a minimal working example?

Ready to join fellow brilliant minds for the SAS Hackathon?

Build your skills. Make connections. Enjoy creative freedom. Maybe change the world. Registration is now open through August 30th. Visit the SAS Hackathon homepage.

Register today!
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
  • 1 reply
  • 889 views
  • 1 like
  • 2 in conversation