Hi Tim,

this is kind of dilemma for me, I see that people on this list are a bit careful about not spoiling homeworks :-) I'm going to help you a bit though.

Let's use the 3rd possibility :-) (Of course there are many more.) I see that you constrain a task to a specified time interval (using something like "TestVal=<:Start.P" etc.). Additionaly, you want to exclude all tasks from some interval, say, "I". For each task, you could specify - before you search for a solution - that it occurs either before or after I. Now there are 2^n combinations, see? So we have 2^n problems, all of which differ in which tasks must occur before I and which occur after I. You already know how to constrain a task to a specified interval, so you should be able to solve these 2^n problems and pick your favorite solution.

The nice thing about Oz is that you can make a non-deterministic choice inside of a search script. (See the "choice" statement.) This enables you to solve only one problem instead of the 2^n (in fact, you still solve 2^n problems, but you can express it using a single script).

Hope this helps,
Filip

Thanks for the ideas. I did know about these possibilities. What I am having trouble with is actually implementing them. Could you give me a small example of each? I would really, really, appreciate it.


Hi,

generally, you have 2 possibilities.

The first is to constrain the task start so that the task can not intersect the interval (e.g. using the \=: operator). You know the task length, so no problem here.

The other option is even easier: create an artificial fixed task that occupies the resource during the outage.

Cheers,
Filip

/ Hi All,
/>/ />/ I have been studying very hard and have finally created an application />/ that will schedule tasks in oz. What is confusing me is how to do the />/ following: />/ />/ 1. Don't schedule tasks for a certain time frame on a particular />/ resource (Either because the resource is down for repairs/unavailable or />/ because a task has already been started and needs to finish)
/>/ />/ The lines that deal with this in my code are:
/>/ />/ fun {Compile Problem}
/>/     TaskSpec = Problem.tasks
/>/     Dur = {GetDur TaskSpec}
/>/     TestVal =  10
/>/     TestVal2 = 15
/>/   in
/>/     proc {$ Start}
/>/     Start={GetStart TaskSpec}
/>/     {ForAll TaskSpec
/>/     proc {$ T}
/>/        {ForAll {CondSelect T pre nil}
/>/        proc {$ P}
/>/          Start.P + Dur.P =<: Start.{Label T}
/>/          TestVal =<: Start.{Label T}
/>/          TestVal =<: Start.P
/>/ %%          Start.P + Dur.P =<: TestVal2
/>/ %%          Start.P \=: TestVal
/>/ %%          Start.P \=: TestVal2
/>/        end}
/>/     end}
/>/ {Record.forAll Start proc {$ S}
/>/                         S={FD.reflect.min S}
/>/                          end}
/>/     end
/>/ />/   end
/>/ />/ I can get it to start from a certain point or not schedule after a />/ certain point, but I can't figure out how to make the constraints such />/ that tasks will be scheduled before a reserved time frame and after. />/ Any ideas/help would be greatly appreciated. By the way I am very />/ impressed with mozart oz. I am somewhat of a newbie to constraint />/ programming but this made it easy to begin./



_________________________________________________________________________________
mozart-users mailing list                               
[email protected]
http://www.mozart-oz.org/mailman/listinfo/mozart-users

Reply via email to