| |||||||||||
| |||||||||||
|
Burglar - Exchange of information with embedded models Description
Further explanation of this example: Whitepaper 'Generalized file handling in Mosel', Sections 6 Exchange of information with embedded models, 7 bin: using Mosel's binary format
Source Files By clicking on a file name, a preview is opened at the bottom of this page. Data Files iodrvmem.c
/*******************************************************
Mosel Example Problems
======================
file iodrvmem.c
```````````````
Using the IO driver `mem'.
- Model source included in application program -
(c) 2008 Fair Isaac Corporation
author: S. Heipcke, 2004, rev. Aug. 2023
********************************************************/
#include <stdio.h>
#include "xprm_mc.h"
/*****************************************************/
/* The source of the model as an array of characters */
/*****************************************************/
const char source_of_model[]=
"model Burglar\n"
"uses 'mmxprs'\n"
"declarations\n"
" WTMAX = 102 ! Maximum weight allowed\n"
" ITEMS = {'camera', 'necklace', 'vase', 'picture', 'tv', 'video', \n"
" 'chest', 'brick'} ! Index set for items\n"
" VALUE: array(ITEMS) of real ! Value of items\n"
" WEIGHT: array(ITEMS) of real ! Weight of items\n"
" take: array(ITEMS) of mpvar ! 1 if we take item i; 0 otherwise\n"
"end-declarations\n"
"VALUE::(['camera', 'necklace', 'vase', 'picture', 'tv', 'video',\n"
" 'chest', 'brick'])[15,100,90,60,40,15,10,1]\n"
"WEIGHT::(['camera', 'necklace', 'vase', 'picture', 'tv', 'video',\n"
" 'chest', 'brick'])[2,20,20,30,40,30,60,10]\n"
"! Objective: maximize total value\n"
"MaxVal:= sum(i in ITEMS) VALUE(i)*take(i)\n"
"! Weight restriction\n"
"sum(i in ITEMS) WEIGHT(i)*take(i) <= WTMAX\n"
"! All variables are 0/1\n"
"forall(i in ITEMS) take(i) is_binary\n"
"maximize(MaxVal) ! Solve the problem\n"
"! Print out the solution\n"
"writeln(\"Solution:\\n Objective: \", getobjval)\n"
"forall(i in ITEMS) writeln(' take(', i, '): ', getsol(take(i)))\n"
"end-model";
/*****************/
/* Main function */
/*****************/
int main()
{
XPRMmodel mod;
int result,i;
char bimfile[2000]; /* Buffer to store BIM file */
size_t bimfile_size; /* Buffer to store actual size of BIM file */
char mosfile_name[40]; /* File name of MOS file */
char bimfile_name[64]; /* File name of BIM file */
i=XPRMinit(); /* Initialize Mosel */
if((i!=0)&&(i!=32))
return 1;
/* Prepare file names for compilation using 'mem' driver: */
/* "mem:base address/size[/actual size pointer]" */
bimfile_size=0;
sprintf(mosfile_name, "mem:%p/%d",
source_of_model, (int)sizeof(source_of_model));
sprintf(bimfile_name, "mem:%p/%d/%p",
bimfile, (int)sizeof(bimfile), &bimfile_size);
/* Compile model from memory to memory */
if(XPRMcompmod(NULL, mosfile_name, bimfile_name, "Knapsack example"))
return 2;
printf("BIM file uses %d bytes of memory.\n", (int)bimfile_size);
/* Load a BIM file from memory */
if((mod=XPRMloadmod(bimfile_name, NULL))==NULL)
return 3;
if(XPRMrunmod(mod, &result, NULL)) /* Run the model */
return 4;
return 0;
}
| |||||||||||
| © Copyright 2025 Fair Isaac Corporation. |