Cases and runtime libraries

Related products: AIMMS Developer
Cases and runtime libraries

AIMMS 4.77 comes with a completely new internal implementation of how cases are written and read back. This was needed because the old code had become too complex to maintain and had known issues that were impossible to fix. This complexity has grown over the years because of new case formats that needed to be supported and various bug fixes that did not really fit in the original design.

So we changed it. We removed the support for really old cases but made sure that the code is still compatible with the case format that has been used for the last couple of years. In other words, we don’t expect any compatibility issues when you start using AIMMS 4.77. Even cases created with this version can be read back in previous AIMMS versions.

But...

We accidentally overlooked one feature of the old cases. This is the feature that you can store and read back the model text of a runtime library. So when you read a case file that contains a runtime library, this library is automatically re-constructed and added to your model. This could even imply that the runtime library that you created explicitly in the code got overwritten by the (older!) version stored in the case file. To be honest, we do not recall why we ever created this feature in AIMMS and what a valid use case could be.

We believe that the majority of our AIMMS users do not even know that this feature exists, and we actually hope that nobody is deliberately using this. In the last couple of years this feature has given us a lot problems and our recommendation has been to explicitly disable this feature for every newly created runtime library (because by default it is enabled). The feature has side-effects that are hard to explain and sometimes are simply wrong.

Usually, our policy is to first announce the deprecation of a feature that we would like to remove from the product, and then really remove it some time later. This time we decided to skip the deprecation stage. We believe that releasing the new case read/write implementation now is of more value than waiting until we have certainty that none of the existing projects suffer from the fact that this feature is no longer in. And we also don’t want to spend our development time in an area that is not (or hardly) used by anyone.

So, please take notice of this change in 4.77. If you see that your model behaves differently after reading in a case, ask yourself the question whether this could be caused by a runtime library and whether your model really relies on reading back the runtime library from a case. Good to know is that this only applies to application specific runtime libraries, the libraries created by for example the WebUI already had the feature disabled long time ago.

Reach out to our support team if you really have problems with this, so that we can help you to fix it. When we see that quite a lot of models are actually using this feature, we will reconsider our decision to remove it.

 

Thanks for sharing! This explains an (up until now) very weird bug in AIMMS 4.76 I reported earlier this week. @mohansx 


@sandervlot  I forgot to mention that if you do not want to include a runtime library in the saving of a case, then you should set the ‘NoSave’ property on the library when creating it. Like this:

me::SetAttribute(myLib, 'Property', "NoSave");

Unfortunately this does not always help when you read back an older case file that has the library already in. Especially if the runtime library is not yet present during case read (because AIMMS then doesn’t know about the ‘NoSave’ property).

If from now on you will just work with 4.77, you can forget about the above.

 

 


Didn't find what you were looking for? Try searching on our documentation pages:

AIMMS Developer & PRO | AIMMS How-To | AIMMS SC Navigator