ISAP Optimization

Generic model

Model overview

c0_Service abstract Service c0_Requirements abstract Requirements c0_Service->c0_Requirements c0_Machine abstract Machine c0_Service->c0_Machine machine c0_Machine->c0_Service services c0_Resources abstract Resources : Requirements c0_Machine->c0_Resources c0_Machine->c0_Resources c0_Resources->c0_Requirements c0_Task Task c0_InterferenceData abstract InterferenceData c0_MachineISAP abstract MachineISAP : Machine c0_MachineISAP->c0_Machine c0_ServiceISAP abstract ServiceISAP : Service c0_MachineISAP->c0_ServiceISAP interferenceSensitiveServices c0_ServiceISAP->c0_Service c0_ServiceISAP->c0_InterferenceData c0_ServiceISAP->c0_MachineISAP machineISAP c0_GoogleCA GoogleCA : MachineISAP c0_GoogleCA->c0_MachineISAP c0_GoogleNY GoogleNY : MachineISAP c0_GoogleNY->c0_MachineISAP c0_GoogleTX GoogleTX : MachineISAP c0_GoogleTX->c0_MachineISAP c0_MailService MailService : ServiceISAP c0_MailService->c0_ServiceISAP c0_SearchService SearchService : ServiceISAP c0_SearchService->c0_ServiceISAP c0_CalendarService CalendarService : Service c0_CalendarService->c0_Service c0_DriveService DriveService : Service c0_DriveService->c0_Service
Module Statistics: | All clafers: 30 | Abstract: 7 | Concrete: 23 | Reference: 10 | Constraints: 22 | Goals: 1 | Global scope: 1..* | Can skip name resolver: no |

Module Downloads: | [.cfr] | [.html] |


Service prototype

abstract Service
requirements : Requirements// resources required by a service
machine -> Machine// machine the service is allocated to
[ this in machine.services ]// inverse relationship constraint

Requirements and Resources prototypes

abstract Requirements
cpu -> integer
abstract Resources : Requirements

Machine prototype

abstract Machine
services -> Service *
[ this.machine = Machine ]
isFree ?
[ isFree <=> no services ]
limits : Resources
utilization : Resources
[ cpu < limits.cpu ]

A machine is free when no services are allocated. Utilization of the machine must satisfy limits.

Optimization goals and constraints

We want to maximize the number of free machines.

Task
total_free -> integer = # Machine.isFree
<<max Task.total_free>>

ISAP problem specifics

abstract InterferenceData
memoryPressure ->> integer
memorySensitivity ->> integer
abstract MachineISAP : Machine
interferenceSensitiveServices -> ServiceISAP *
abstract ServiceISAP : Service
interferenceData : InterferenceData
machineISAP -> MachineISAP
[ this = machine ]
memoryPressureToThisService -> integer = totalPressure - interferenceData.memoryPressure
// typecasting the machine to MachineISAP

Particular data (machines and services)

Machines

GoogleCA : MachineISAP
[ limits.cpu = 10 ]
GoogleNY : MachineISAP
[ limits.cpu = 16 ]// constraint:
GoogleTX : MachineISAP
[ limits.cpu = 14 ]

Services

CalendarService : Service
[ requirements.cpu = 1 ]
DriveService : Service
[ requirements.cpu = 2 ]