### Quickly determine on which pages an identifier is used

In December 2011 I wrote the blog article about Determining where each identifier is used in your project. This article showed how the function *ReferencedIdentifiers* could be used to obtain information about which identifiers referred to which other identifiers.

In the same article, I also explained you could use the functions *PageGetAll* and *PageGetUsedIdentifiers* (or alternatively the function *IdentifierGetUsedInformation* that was introduced in AIMMS 3.12 FR2) to get information about which particular pages have references to an identifier.

Although this approach is useful if you want to get information for all of the identifiers, it is a bit cumbersome to just quickly get the information about which pages are using one specific identifier.

### Easily align multiple objects on page

When creating a Graphical User Interface for your AIMMS project you typically want to nicely align the different objects that are present on a page.

For example, the different buttons you have on one page should all be the same size. Furthermore, if you have multiple buttons, you might also want to have them nicely spread horizontally (i.e. have the same amount of spacing between all of the buttons) as displayed in the picture on the left.

### Automatic Benders’ decomposition: AIMMS beta version available

Benders’ decomposition is an approach to solve complicated mathematical programming problems by splitting them into two, and thereby simplifying the solution process by (repeatedly) solving one master problem and one subproblem. If the problem contains integer variables then typically they become part of the master problem while the continuous variables become part of the subproblem. The classic approach of the Benders’ decomposition algorithm solves an alternating sequence of master problems and subproblems. Benders’ decomposition is mostly used for solving difficult MIP problems and stochastic programming problems.

We have developed a generic Benders’ decomposition module in AIMMS that is easy to use. A beta version of AIMMS 3.13 with Benders’ decomposition is now available for downloading. If you are interested to try it then we invite you to send an e-mail to our support.

### Happy New Year

We want to wish you an optimized 2013!

Above you see a screencast of a small AIMMS demo project that animates exploding fireworks with the network object in AIMMS.

### ROGO solver using constraint programming

The ROGO puzzle, rogopuzzle.co.nz, challenges players to find a good path on a board, pick up treasures, and avoid pitfalls. This puzzle, and its corresponding iPhone app, were originally developed in New Zealand. In this post, I’ll explain a method for solving ROGO puzzles using constraint programming in AIMMS.

### Getting multiple solutions from the solver

Some of the solvers in AIMMS, including the CP Optimizer solver for Constraint Programming problems, support not only returning a single (optimal) solution, but also a pool of feasible solutions.

Some time ago, Hakan Kjellerstrand has done a thorough review of Constraint Programming in AIMMS. One of the remarks he posted at the end was that it was not completely clear how to obtain multiple solutions from the CP Optimizer solver.

In this post I will show how to instruct the solver to create the additional solutions and also how to retrieve them in AIMMS after the solver is finished. I will do this by modifying the original N-Queens problem as implemented by Hakan in his review.

### Coloring the states of the USA

Map coloring is a very nice introductory problem to constraint programming; Given a graph *G=(V,E)* with vertices *V* and edges *E* in between, what is the minimum number of colors needed such that two adjacent vertices, *v1* and *v2, *have different colors? One obvious application of this problem is in the construction of maps with two adjacent regions that can easily be distinguished by their colors. Creating a map coloring application has two distinct aspects; the problem itself, and the presentation of the solution. Both are described in this post.

### Scheduling for project planning

The identifier types ACTIVITIES and RESOURCES, and the scheduling intrinsic functions as part of the AIMMS constraint programming component are very useful in modeling construction projects and optimizing the makespan of those projects.

Several existing constraint programming languages use the Bridge Building example in the Ph.D Thesis of the late M. Bartusch to illustrate this, see for instance Oz and SAS.

### What is the element after the last?

Consider a stock balance *S(t+1)=S(t)+P(t)-D(t)*. Via *t+1* we refer to the next element in a set. Using such an expression as an argument of a variable, as in *S(t+1)*, we refer to the stock of the next period. The meaning of an expression like *t+1 *needs to be well-defined, including when t equals the last element in the set H. This brings us to the question in the title of this post.

Consider the situation with an index *i*, such that . To denote the next element in a set, the *+1* notation is used. Clearly, for *i=3, i+1=4*, but when *i=5*, what should *i+1* be?

Let me answer this question, by considering a few other examples as well, and then come back to how you may handle this in the stock balance.

### Investigating possibilities Google Hangout

Over the past couple of months I have become a bit more active on Google+ and have really started to appreciate it. One of the very nice functionalities that Google+ provides is the idea of Google Hangouts.

Hangouts are a way of letting a group of people (currently up to 10 people) meet virtually. Besides showing your face with a webcam, hangouts also allow you to share your screen. And, in addition to the 10 people that can be active in the hangout, anybody else can watch the hangout live.