One of the nice things of the pivot table in AIMMS is that you can easily display a large number of identifiers. Especially after the feature to select specific elements of a set to be displayed, this really allows for end-users to perform so-called slice-and-dice to get insights in data/results.
Normally, if you want to display multiple identifiers in a page object in AIMMS (for the ones that support this), you have to explicitly add each of these identifiers in the contents tab of the page property. Especially when the number of identifiers is large, this can take quite some time. Fortunately, the pivot table in AIMMS also has the option to work with a so-called implicit identifier set.
For most users, it is actually not a big problem if execution of certain steps in your project take some time, as long as they know that something is actually happening. If you don’t provide any feedback to the user about what is currently happening, the user might think that the application is hanging.
One possibility you have in AIMMS is to use a progress bar dialog indicating the progress via a graphical progress bar combined with a string describing the status.
For a lot of problems you will need to work with some time based notion during the modeling. For example, with a transportation problem the main decision could be how much to transport from each depot to each customer for every day in a given time horizon.
Of course, it is possible to just create a set Days in AIMMS and give this exactly the same number of elements as there are days in the time horizon you are considering. However, this would require you to manually keep track of which of these elements are working days and which ones are weekend days. Also, you would have to take care of the fun details regarding leap years. Fortunately, in AIMMS you have the possibility to work with a Calendar, which makes working with time related things a lot easier.
Whenever you changed the values of some identifiers and close your AIMMS project, the default behavior of AIMMS is that it will ask you whether you want to save the unchanged data. This behavior depends on which data categories and case type are currently active.
There can be situations where it is useful to not have this check based on a case type / data category, but just check whether a give subset of all identifiers in your model have been changed since the last time you checked. With AIMMS 3.12, we have introduced the data change monitor functionality which allows you to achieve exactly this.
In the first post of this year (Happy New Year) I showed how you can use the network object in AIMMS to create an animation of exploding fireworks. In another recent post (Using colors for feedback in pivot table)I showed how you can use the pivot table in AIMMS to display a heat map.
In this new post, I will show how you can use the user color related functions UserColorAdd and UserColorDelete in AIMMS to create an animation of the heat map that is displayed on the right.
The goal is to create an animation that will morph the picture such that each point that starts out as green ends up as red and vice versa.
After my questions on both the AIMMS Google Group and on this Blog about participating in an AIMMS Google Hangout, I got two replies from Yawen and Thiruselvan that they were willing to be the guinea piggs.
We just finished the first AIMMS Hangout and I would like to thank both Yawen and Thiruselvan again for being the guinea piggs!
In the rest of this post I will provide some more details about the questions and pointers that might be helpful.
In an earlier post Change default solver used for each type of mathematical program I showed how you can modify the default solver that AIMMS will use for solving each type of mathematical program.
I did not only demonstrate how you can modify these defaults via the solver configuration screen (which you can access via the Settings menu), but also showed how you could temporarily overrule this default by modifying the contents of the predefined CurrentSolver element parameter or by using a where clause with the solve statement.
Normally, the list of solvers available via the solver configuration screen is the same for all projects opened with the same version of AIMMS. In this post, I will show how you can overrule the solvers that are available for your current project.
Unfortunately, when modeling things hardly ever go as planned at the first try and more than once you end up with results that you did not expect. At first glance everything in the symbolic model (i.e. the variables, constraints, and parameters in the model tree) might look OK, but still you are getting results that do not make sense or the solver concludes that your model is either infeasible or unbounded.
Luckily, for these cases, AIMMS provides a couple of tools that allow you investigate what is actually being sent to the solver (i.e. the complete generated problem). Investigating the information from these tools, allow you to figure out what part of your model is causing the unexpected results.
The saying is that one picture says more than a thousand words. When presenting some data to an end-user in your AIMMS project, you have the possibility to use the different page objects AIMMS provides. Besides presenting the data in a graphical manner, you often also present the data in some sort of a table.
Especially when you are displaying large datasets with lots of numbers, it might be difficult to quickly see the information in this data from a table. The pivot table object in AIMMS has a feature that allows you to use some colors to provide a graphical feedback to the user regarding the data that is displayed.
Solutions from rostering applications affect the daily life of the people rostered. Therefore, the application developers and planners iteratively improve the rostering applications and the quality of the solutions, often based on the feedback of those affected by the rosters created. The close link between the modeling language and GUI pages in AIMMS makes it easy to study the solutions and (re)formulate constraints.
In this post, the steps are described to develop a small rostering application in AIMMS. This application is based on an assignment given in “Integrated methods for Optimization” by John N. Hooker, section 2.2.5. The problem is to create a weekly roster for 4 nurses to help in a home for the elderly. A day has three shifts: day, evening, and night. Each shift is staffed by one nurse, so one nurse is free each day. We try to balance the free days per nurse, require at least 16 hours between shifts, and minimize the nurses per particular shift, and the number of changes in staffing per shift.