Over the summer I’ve been meeting weekly with one of my committee members who is an expert on the subject of decision guidance systems. That is, helping someone make the best choice from among complex alternatives. I’m working with him to devise a way to select the best possible combination of services to complete a task when there are several valid combinations available. I’m basing the selection on a Quality of Service model I’ve developed that includes factors such as the cost to invoke a service, the time the service will take to complete, etc.
It’s been quite an interesting experience, though frustrating at times. The problem is that selecting the best combination of services is an NP-hard problem. In order to make an accurate selection in a reasonable time, we will be using an optimization engine developed by IBM that uses a language called OPL (Optimization Programming Language). To make use of that language, we need a precise model of the problem space.
So over the summer we have been working to define precisely what is meant by a “process model” and a “service composition.” And this is precise in the mathematical sense meaning rigorously defined in such a way that the definition can be queried for exact results. The difficulty is that any given service that is used in a process may be a “virtual service” — that is, a composition of services that is offered up as a pre-made package. (This is different from an atomic service, which is an offering that cannot be broken down into any smaller unit.)
In order to accurately calculate the quality of service for a given composition, we have to calculate the QoS for every constituent atomic service within all of the virtual services, and this must be decomposed recursively for all virtual services that may be invoked.
So we’ve had to create recursive definitions for a process and a service (as is turns out, any process is itself just a virtual service, so that simplified the problem a tiny bit). Once that was done, we have to develop recursive definitions for calculating the QoS of each service and rolling those up. Cost is easy, in that it’s a sum of the costs of each constituent service. But things like duration are more difficult, as some services may run in parallel.
It’s been interesting and enlightening, but it has certainly been tedious. I am generally good about paying attention to details, but this has been a whole new kind of detail-oriented for me.