5.0

5.0 | 5 ratings Rate this file 110 Downloads (last 30 days) File Size: 10.6 KB File ID: #35720
image thumbnail

MINLP: Mixed Integer Nonlinear Programming

by

 

Mixed Integer Nonlinear Programming Solver with APM MATLAB

| Watch this File

File Information
Description

Solves the mixed integer nonlinear problem:

min p(x,y)

s.t. f(x,y) <= 0
s.t. g(x,y) == 0
s.t. lb <= x <= ub
s.t. nlb <= y <= nub
x(yidx) integer where yidx is a logical index vector
y continuous variables

This program solves nonlinear mixed integer problems with a branch and bound method. NLP relaxations are solved with IPOPT or APOPT.

Files:
minlp.m - Solve the example MINLP problem
minlp.apm - MINLP problem definition
Other:
APM Function Library (v.0.5.6) in folder
Further work:
Add heuristics to create a good initial integer solution
Add cuts to the problem (branch and cut method)
  
Some testing shows that it works well with up to around 30 integer variables and 10000 NLP variables. Solutions to NLP relaxations are solved as a web-service. With the network communication overhead, the solution time may be slower than other MINLP solvers such as DICOPT, BONMIN, etc. This program is intended for educational purposes and to attract collaborators for future developments. The release notes and development roadmap are listed at the APMonitor.com web-site:

http://apmonitor.com/wiki/index.php/Main/ProductRoadmap

Acknowledgements

Bnb, Fminconset, and Linear Mixed Integer Program Solver inspired this file.

This file inspired Model Predictive Control, Comparison Of 5 Estimator Methods, New Ode And Dae Solver, and Moving Horizon Estimation.

MATLAB release MATLAB 7.13 (R2011b)
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (18)
08 Aug 2014 Emre Savas

One last question, Where exactly I should put csv_load() command in minlp.m file that you provide in your submission? I think this is why I can't retrieve the data from csv file.

I am using minlp.m file that you submitted in this page.

Thanks for your help

07 Aug 2014 John Hedengren

Below is a simple model file that demonstrates how to load in external parameters into APMonitor. You can replace the File *.csv section with loading a CSV file of your choice through MATLAB with the csv_load() function. For testing, just copy the lines below and insert into the web-interface at: http://apmonitor.com/online/view_pass.php

Constants
m = 4

Parameters
c[1:m] = 1.2

Variables
intv ! integer variables start with "int"

Intermediates
! summation of all elements
s[0] = 0
s[1:m] = s[0:m-1] + c[1:m]

Equations
! v to be equal to the nearest integer for summation
minimize (s[m] - intv)^2

File *.csv
c[1], 2.3
c[2], 5.1
c[4], 0.0
End File

07 Aug 2014 Emre Savas

I have tried to do it in either way, but I am always getting this error:

Error using urlreadwrite (line 90)
The server did not find a resource to match this request.

Error in urlread (line 36)
[s,status] = urlreadwrite(mfilename,catchErrors,url,varargin{:});

Error in apm_sol (line 7)
response = urlread(url);

Error in minlp (line 160)
sol = apm_sol(server,app); % retrieve solution

what I did was;
1. using csv_load:
I declared "c" as a parameter in .apm file, and typed csv_load(server,app, 'minlp.csv') command in minlp.m file.
OR….
2. Declaring parameters as FV:
I removed c[1], c[2], and c[3] parameters from amp file, and I put:

apm_info (server, app, 'FV', 'c[1]')
apm_meas (server, app, 'c[1]', 130)
apm_info (server, app, 'FV', 'c[2]')
apm_meas (server, app, 'c[2]', 150)
apm_info (server, app, 'FV', 'c[3]')
apm_meas (server, app, 'c[3]', 180)

this code in minlp.m file.. I am getting the same error in either methods.
Thanks for your help!
Emre

07 Aug 2014 John Hedengren

The easiest way is probably as a CSV file and then load the data file with the command:

csv_load (server, app, csv_filename)

You'll need the APM MATLAB toolbox library that you can download from APMonitor.com. If you have the values in MATLAB you can also declare your parameters as FVs (fixed values) to create a way to load values dynamically such as:

apm_info (server, app, 'FV', 'c[1][5][2][25]')
apm_meas (server, app, 'c[1][5][2][25]', 5.2)

Unfortunately there are only convenient ways to load in 2D matrices in APMonitor.

06 Aug 2014 Emre Savas

John,

I would like to assign different numbers to each cell of my matrix, which are independent of other variables. i.e:
c[1][1] = 150
c[1][2]= 120
c[1][3] = 180
….
c[1][30]=45
where right hand side is an array of {150, 120, 180,…,45}
Is there an easy way to assign these numbers ?

06 Aug 2014 John Hedengren

Okkes, you may find it easier to declare a constants and then use vectors and arrays within APMonitor to define variables and/or equations. Here is an example:

Constants
n = 130
m = 75
End Constants

Variables
val[1:n][1::m]
End Variables

Equations
val[1:n/2][1::m] = val[2:n/2+1][1::m]
val[n/2:n][1::m] = 6
End Equations

Here is some additional information:

http://apmonitor.com/wiki/index.php/Main/Arrays

You can also submit a question to the APMonitor Discussion Forum here:

http://apmonitor.com/wiki/index.php/Main/UsersGroup

Let me know if you have any additional questions.

06 Aug 2014 Emre Savas

Thanks for your submission. It's quite user-friendly toolbox.

I have a question. I need to create a matrix array (i.e f(i,j) where i and j are indices) using the parameters I define in my program. However, I would like to create it in a for loop statement to make it easier. It is quite painful to assign each cell of the array as an equation, if the dimension of indices (i and j) are too large.

Is there any way to do this?

Thanks,
Emre

17 Apr 2014 Magina  
02 Mar 2014 Elham

Hi John

thanks. so you mean there is nothing available in MATLAB?
AMPL is not in MATLAB.

10 Feb 2014 John Hedengren

Elham,

This file shows a branch and bound algorithm in MATLAB but it is development code that is meant for understanding the algorithms. If you just have an MINLP problem that you'd like to solve, I'd recommend that you use either a program like AMPL or APMonitor. For a tutorial on solving a Mixed Integer problem, please refer to this video:

http://youtu.be/i8WS6HlE8qM

If you start at 8:30, you'll see how to set up an integer programming problem (by adding "int" to the variables names). The APOPT solver is an MINLP solver and will be able to solve your problem and it will do it much faster than this development MATLAB code.

-John

09 Feb 2014 Elham

Hi
If I just changed this objective function :minimize obj + y[1]*y[4]*(y[1]+y[2]+y[3]) + y[3]

then what about the constrains? They should also be changed?

Moreover, could you please tell me that I just need to change minlp.apm file? And no more verifications in other files? I almost cannot understand them line by line.
I just need to run a mixed integer nonlinear optimization with an objective function and constrains.

27 Jun 2013 justinian555

okay,thanks for your reply

26 Jun 2013 John Hedengren

Justinian, there is additional information on vector and matrix operations in the documentation here:

http://apmonitor.com/wiki/index.php/Main/Arrays

It is an algebraic modeling language and matrix operations are supported although not as easily as MATLAB where matrices are a native structure.

Another strategy is to shift some of the pre- or post-processing to the MATLAB script and use APM for only the parts that need to be optimized. For example, if you Q * Q' can be done after the optimization, the results are returned to the MATLAB script where you can do this processing.

26 Jun 2013 justinian555

Hello

could apm file key matrix??
if yes , how can i do matrix multiply
such as declare Q as a matrix (K*K)
b (K*1) vector
then do Q*x<b
and can do Q*(Qtranspose)

Thank

Justinian

25 Jun 2013 John Hedengren

Ziba, you need to change the following line in the minlp.apm file:

minimize obj + y[1]*y[4]*(y[1]+y[2]+y[3]) + y[3]

to be your specific objective function. You should also look at the APM MATLAB toolbox that gives you more flexibility and allows you to solve with the APOPT solver which is much faster than this version because all of the sub-NLP problems in the branch and bound are not solved with MATLAB but with optimized compiled code.

http://apmonitor.com/wiki/index.php/Main/MATLAB

The purpose of this submission is to demonstrate branch and bound algorithms in MATLAB, not necessarily as optimized code. The APOPT through APM MATLAB toolbox is many times faster than this version. The advantage of this version is that you can use any NLP solver to solve the relaxed sub-problems and you also have the source code instead of using it as a web-service.

-John

25 Jun 2013 Ziba

Hello

If I want to use minlp as a function in my program how should I introduce my objective function to this function. I will be thankful if let me know the exact format for calling minlp function.

Thank yoy
Ziba

15 Apr 2013 John Hedengren

Yes, the x represent integer variables. You can change the problem by opening minlp.apm with a text editor. This is a developmental version of an MINLP solver. For a much faster solver, use the "built- in" branch and bound capabilities of APOPT through APM MATLAB.

http://apmonitor.com/wiki/index.php/Main/MATLAB

Here is an example with integer variables that can be solved through a web-interface:

http://apmonitor.com/online/view_pass.php?f=minlp.apm

15 Apr 2013 ahmad

Hi, sorry how we can input our own objective functions? by the way, x represent integer variables and y represents non-integeres, yes?

Contact us