Writing essay services
In PDDL, we can model such a constraint easily (if verbosely) as a condition on every action. Such constraints are also generally easy to model in PDDL. If an operator B must be preceded by an operator A, then we can have action A set a predicate, aExecuted, that is a precondition for operator B. Constraints on the time at which evolution operations are carried out, or the time by which certain goals must be achieved, are extremely common in real-world evolution. In the simplest case, there may be a requirement that the evolution be completed by a specific date. In more complex cases, there may be a set of such requirements: feature A must be available for client 1 by April, feature B for client 2 by fuly, and so on. These can be modeled in PDDL by setting appropriate conditions on durative actions. A more complex kind of timing constraint is a constraint that certain actions can be performed only at certain times. A real-world example is that many retailers, such as Amazon. There are some challenges, however, which are explored in section 6. There are many constraints that do not fit into these categories, but it seems that many of the constraints that arise in real-world evolutions do fall into these groups (see, for example, section 5. A final point to note is that PDDL3 has its own notion of a constraint. Like our constraints, PDDL3 constraints express conditions that must be met by an entire plan (in contrast with conditions in PDDL2. Moreover, these constraints are expressed in a syntax reminiscent of temporal logic, with operators such as always, sometime, at-most- once, and so on. As a result, this constraint language is less expressive than LTL.
Nonetheless, PDDL3 constraints would be a useful way of expressing a broad class of evolution path constraints.
As we have seen, there may be evaluation functions for various dimensions of concern, such as cost and availability, which can be composed together into an evaluation function that captures a notion of overall path utility. Evaluation functions such as cost and availability can be modeled as nullary functions in PDDL, and their values can be modified by actions as appropriate.
Finally, we can use these values to set a plan metric in the problem description, which planners will try to optimize in generating a plan.
This metric can simply be a reference to a function, or it can be an arbitrary arithmetic expression. The metric can also incorporate the total duration of the plan by using the built-in variable total-time. The scenario is based loosely on a real-world data migration experience that we had previously elicited (for other purposes) from a practicing software engineer. We elaborated this experience into a complete description of an architecture evolution problem, so that it would be specific enough to operationalize as a planning problem.
Then, using the approach described above, we translated this scenario into PDDL. Our example is based loosely on a real-world data migration scenario, in which a company had to migrate a number of services from an old data center to a new data center.
The planning for this migration was nontrivial, because there were a number of interacting constraints governing how the various services had to be moved. For example, some services had to be continuously available for regulatory reasons (zero planned downtime). In other cases, there were periods when certain services were required to be online (e. And there were a few unique legacy services that were running on custom-built, special-purpose hardware. These services were so closely tied to the machines on which they were running that the only practical way to migrate them was to load the machines onto a truck and drive them to the new data center. Deployment view of the initial architecture of the data migration scenario. The planning process ultimately took roughly six months, and the migration itself was carried out writing essay services over several weekends.
For example, although we had general information about the kinds of architectural elements and evolution constraints, we did not have a list of specific service names and locations, so we invented fictitious service names and assigned them to hosts at will. There are five hosts in data center DC1, each with one or more services, all of which must ultimately be migrated to DC2. We defined a number of specific evolution constraints based on the real-world constraints above. For example, we specified that the payroll service in figure 17 must be available on Mondays to permit payroll processing, and we defined rules governing how the services could be moved (e. Finally, we defined two ways of evaluating path 134 6. Cost is affected by when and how systems are migrated (writing essay services migrating a system on weekends is more expensive than during normal working hours, and physically moving a host is much more expensive than cloning a host over the network). Duration refers to the overall time to complete the evolution. In the domain description, we defined PDDL types for the architectural element types: DataCenter, Service, and Host (with subtypes UnixHost and WindowsHost). We defined predicates to indicate relationships among elements, such as an is-in predicate that holds when a given host is in a given data center and an is-on predicate that holds when a given service is on a given host. With these types and predicates defined, we were able to translate the initial architecture in figure 17 into a PDDL description of the initial state. Representing the target architecture as a set of goal conditions, on the other hand, entails some subtleties. In principle, we could define the target architecture by the same method that we defined the initial architecture—specify exactly which services are on which hosts and which hosts are in which data center. In practice, however, this would be a bit too restrictive. Because services can be migrated in multiple ways—cloning, manual service-by-service migration, or physical relocation—there are actually multiple legal end states. For example, we could clone ClientWebsite- Hostl onto a new host in DC2 and decommission ClientWebsiteHostl, or we could instead move ClientWebsiteHostl itself to DC2. Many planners—including OPTIC, one of the planners we used in this work—do not support goals with negative or existential operators.
To get around this, we defined helper predicates such as was-migrated (to indicate that a service has been migrated) and was-removed-from (to indicate that a host has been removed from a data center) and modified the actions to update them throughout the evolution. We represented the operators as actions in accordance with the approach described in section 6.
Figure 18 shows an example: the action for manual migration of a service writing essay services from one host to another. The action first defines its parameters: the service being migrated, the hosts it is moving from and to, and the current day (I will explain this parameter shortly). For example, to migrate a service s from host hi to host I 12 , clearly 5 must be on 136 6.
We also require that hi is in DC1 and I 12 is in DC2 (we only want to move services from DC1 to DC2), and we require that the firewall and network switch are already installed. The conditions that reference no-work-in-progress, today, and time-since-last-day are used in modeling the passage of time, which I describe later in this section. When the manuallyMigrateService operator is applied, the effect on the architecture is that service 5 is now on host fi 2 - We also must set here a number of helper predicates, as mentioned earlier, such as was-migrated, not-yet- migrated, and is-unused.