Re: kplato

John Lamb <[email protected]>
Newsgroups gmane.comp.kde.kplato
Message-ID <[email protected]>
Dag Andersen wrote:
>>By subtask, do you mean a collection of tasks (almost like a
>>miniproject?) That can be handled by PERT/CPM modification so that
>>the collection has a defined duration gotten by calculation.
> 
> No, I meant the oposit. A subtask is one of the tasks in a 
> collection :) A task that have subtasks (children) is a summary task 
> (also sometimes called a container).
> A summary task does not have resources, duration etc, it just sums up 
> its subtasks. So the summary task starts when the first subtask 
> starts and finishes when the last subtask finishes. 
> One thing a summary task can have is relations. Linking a task to a 
> summary task should have the same effect as linking the task to all 
> the summary tasks subtasks. (puhh)

OK. Not implemented in pert/cpm. But could easily be implemented.

>>I really meant a little more. The functions to add and remove
>>nodes, etc., could be separated. Maybe that's not so practical.
> 
> Yes, I had a feeling it was more to it. 
> Well, from the code a can see that there are a number of functions 
> involved.
> These are defined in KPTNode:
> - initialize_arcs
> - set_up_arcs
> - set_unvisited_values
> - set_pert_values
> They all mine data from the node and recursivly from its children, so 
> to separate these from KPTNode, I'd say you need a "copy" of the 
> project node structure for them to operate on.
> 
> These are defined in KPTProject:
> - pert_cpm  
> - forward_pass
> - backward_pass
> These gets duration from each node and writes back 
> erliestStart/latestFinish.
> 
> So one way to do this is to give you a "copy" of the nodes (doesn't 
> *need* to be a full copy, only the info you need) then you calculate, 
> store the results in the "copy" and returns it. It is then used to 
> update the nodes.
> What do we gain? We can make PERT/CPM independent of KPlato, of 
> cource. Other than that, I don't know.

That was probably the main gain for me. If pert/cpm is independent it is 
easier to test robustly.

> OTOH, there might be other ways to do this, and if you rewrite, who 
> knows?

Maybe an interface class. I'd need to look more at this.

>>eventually pert/cpm might call any duration function so probably
>>ought to be called with a pointer to member function argument whose
>>default argument was expected duration. This would allow standard
>>pert/cmp and also monte-carlo type stuff.
> 
> Or called with an enum specifying what "type" of duration to get, so 
> that PERT/CPM calls node->duration(type) instead of 
> node->expectedDuration() as now?
> 

That is probably better. It's a little more flexible and certainly more 
readable.

>>IIRC that's right. The problem is I don't recall and I don't see
>>what the rest of the code does with this information. pert/cpm is
>>not yet suggesting when a task should start - just when it could
>>start.
> 
> Yes, atm I use earliestStart/latestFinish together with duration and 
> ASAP/ALAP to place the node within the timespan. I think ASAP/ALAP is 
> not a problem, they don't really affect the PERT/CPM calculations (at 
> least not before resources are considdered?.) The other constraints 
> will do, though:

OK, very useful to know.

> Start Not Earlier Than, Must Start On etc means that pert_cpm must 
> place these node on specific times and it may not be possible in 
> which case erros must be signaled.

a modified pert/cpm can handle these.

>>Good idea. I can write the function. It will be easier if you can
>>say what you want it to return. If it's called before a new
>>dependency is added all it must do is check the dependency and
>>return true/false. If you want something more robust (maybe someone
>>introduces several bad dependencies) then it could return a list of
>>possible dependencies where at least one had to be removed.
> 
> I was thinking: when a dependency is defined it is checked for 
> validity and rejected if it's not ok. There are atm 2 ways to define 
> a dependency:
> - In a dialog
> - Loading from xml file
> So I think this should be checked there and then, and we can forget 
> about it elsewhere. 
> 

It was the XML-style that concerned me more. Actually, it could probably 
be handled at load time because dependencies would be added one by one.

>>OK. But PERT/CPM will also have to tell whether the project is
>>feasible. This is necessary eventually anyway. If there are no
>>resources but a task needs some then it can't be done. What sort of
>>information would be useful to the user? Maybe a list of tasks with
>>unsatisfied constraints.
> 
> I was thinking of error information stored in each node/resource, then 
> the ui can decide how to present it.
> 
That is a good idea. The pert/cpm code still would not have to 
communicate directly to the interface.

-- 
JDL

Non enim propter gloriam, diuicias aut honores pugnamus set propter
libertatem solummodo quam Nemo bonus nisi simul cum vita amittit.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.