Author Archives: Chris Kuip
This blog post is the last in a series of thee to enable AIMMS app developers to model file sharing in a secure manner. In the first post, we covered authorization of AIMMS PRO users, and in the second, we covered transferring files. In this blog post, we will cover granting and denying access to files in AIMMS PRO storage.
AIMMS PRO storage organizes access per entity, whereby an entity is a user or a group of users. We start with retrieving the set of entities and the group or user names associated with them. This can be done via the following call to system library AimmsProGUI:
This blog post is the second post in a series of three to enable AIMMS app developers to model necessary file sharing in a secure manner. In our first blog post, we covered AIMMS PRO User groups and how they can be used to authorize access to information within your AIMMS Apps. This blog post explains how you can upload and download files to and from AIMMS PRO Storage.
AIMMS PRO is a multi-user environment, designed to host several Apps used by several end-users. Information is shared by these users via these applications. Depending on the role of the app user in the organization, selected information may or may not be accessible. For instance, a planner may change the production plan, that plan can be inspected by management, but is not accessible to the HRM staff.
This blog post is the first post in a series of three to enable AIMMS app developers to model necessary file sharing in a secure manner. The topics of the three posts are:
1. Identify the user of the AIMMS PRO App and the AIMMS PRO groups they belong to
2. Upload files to AIMMS PRO Storage and download files from AIMMS PRO Storage
3. Grant access, via authorization strings, as appropriate to files in AIMMS PRO Storage
The AIMMS WebUI is well known for its capability to create a UI for inspecting and analyzing data in a browser and for modifying existing data. However, as a model developer, you also want your users to be able to:
- Create new data,
- Modify existing data, and
- Detect invalid data as soon as possible
Consider the picture below:
There are various relations between identifiers. On the one hand, when one identifier is functionally dependent on other identifiers, a parameter definition can be used to state such a relation. On the other hand, when several identifiers are mutually dependent, a constrained optimization problem can be formulated to search for the optimal solution. However, there are also use cases whereby a small group of identifiers are mutually dependent and a simple procedure exists to update the “other” identifiers in that group when one of them changes.
A small example is an arrival/departure time dialog:
- when you know the arrival time, you can compute the necessary departure time, or
- when you know the departure time, you can compute the resulting arrival time.
In such a use case, you want to invoke a procedure to handle the modification of the value of an identifier.
A validation rule to check the mutual consistency of selected input identifiers is another use case.
Adding buttons to the application UI to handle these situations is not a proper solution; your users run the risk of pressing the wrong button, or forgetting to press it.
So how can we specify in AIMMS that the proper procedures are run upon modifying the data of selected identifiers?
The AIMMS WebUI pivot table displays all numbers, including zeros, always in light blue and on a white background. However, HTML allows us to style each cell in a grid individually to communicate more effectively. How can we leverage this power of communication in an easy to use manner?
This is a short blog on tweaking a WebUI line-chart widget to capture forecasting data focusing on the use of CSS for visualization tuning. My preference for visualizing forecasting data is to have the observations as separate points, and the estimates connected via lines.
A mathematical formula is considered data within an application when it is read in as a string during the application’s runtime, and subsequently used in the construction of selected assignments and constraints. The concept “Formulas as Data” can be applied to several optimization apps, for instance those that deal with “Blending on Specification” and “Asset Management.” In these types of applications, the benefit of the end-users is that they do not have to share these formulas with anyone else, including the developers of the apps. For such apps, good formulas are expensive to develop and having good formulas provides a competitive edge to these end-users. In AIMMS, formulas can be used in the following way:
- String parameters – a formula is a sequence of characters, and such sequences can be stored and manipulated via string parameters. Such manipulation is executed at AIMMS run time.
- Macros – a formula is a mathematical expression and this expression is created during AIMMS compilation time.
The two identifier types, string parameter and macro, effective at different times as far as the AIMMS system is concerned, need to be combined in order to support the concept “Formulas as Data.” How do we go about this? Continue reading »
When constructing AIMMS models, we are usually able to handle repetition and structure by adding indexes. For instance, if we have built a model for the conversion process of a single machine, we do not have to duplicate the relevant model code when given an extra machine. Instead, we can use an extra index over a set of machines. However, there are situations where adding an extra index is not an option. This blog post will provide an example of such a situation, illustrating how the issue can be tackled using the AIMMS Model Query and Model Edit functions. Continue reading »
Data exchange is an essential part of every application. AIMMS supports various industry standards for data exchange, such as ODBC for databases, XML Files and spreadsheets. But what if the data is not stored according to one of these standards? In order to read data from an arbitrary data source, AIMMS offers access to self-developed or third party functions. This blog post provides an overview of the steps you need to take to create a data exchange link between a proprietary data format and AIMMS. The process is illustrated by using a concrete modeling exercise from the Constraint Programming example library CSPLIB. Continue reading »