[kepler-dev] Workflow for recursive algorithm?

Zhijie Guan guan at sdsc.edu
Fri Jan 20 11:58:50 PST 2006


Hi,

Does anybody have the experience of modeling recursive process using 
Kepler workflow? Any comments/suggestions/ideas are appreciated.

Currently I am trying to model an algorithm which is similar to a tree 
traversing process. Many algorithms involving tree data structrue use 
recursion. Although theoretically any recursive function can be 
transformed into an iterative function by using a stack, it is often 
difficult to transform tree traversing algorithm because the tree may have 
unknown length. So I prefer to explore Kepler's ability of describing 
recursions.

Here comes the pseudo code of the recursive algorithm:

FUNCTION recursiveDCM(tree)
 	IF tree is small enough THEN
 		evaluateTree(tree)
 	ELSE
 		subtrees[] = divideTree(tree)
 		FOR EACH subtree IN subtrees[]
 			recursiveDCM(subtree)	// Recursive call
 		finaltree = mergeTree(subtrees[])
 	END IF
 	return(finaltree)
END FUNCTION

The functions evaluateTree, divideTree, and mergeTree have been 
implemented as actors. I would like to build the function recursiveDCM as 
a workflow. I know it's pretty easy to wrap all the code into one actor 
to implement the recursion since Java itself supports recursion. But I 
would like see if Kepler can handle it.

The first method popped up in my mind is to use CompositeActors. I tested 
my idea with a simple String Concatenate workflow. I firstly built up a 
workflow which includes a StringConstant actor, a StringConcatenate actor, 
and a TextDisplay actor. They are linked as the following:

StringConstant-->InputPort1 of StringConcatenate-->TextDisplay

Then I wrapped the StringConstant and StringConcatenate actors as a 
CompositeActor. So the workflow now looks like:

CompositeActor-->TextDisplay

Then I copied the CompositeActor, open the CompositeActor (look inside), 
and pasted the CompositeActor into the CompositeActor editing interface. 
Then within the CompositeActor editing interface, I connected the output 
of CompositeActor to another input port of the StringConcatenate actor. 
Now the inner structure of the CompositeActor looks like:

StringConstant-->InputPort1 of
                                StringConcatenate -->Outgoing port
                  InputPort2 of
                /
               /
CompositeActor

I hope including a CompositeActor into itself could let me model the 
recursive process. But it does not work as I expected. I checked the 
workflow XML file, this method only adds one more layer of CompositeActor 
into workflow definition.

Does anybody have better solutions to this problem?

Thanks in advance!

Zhijie


More information about the Kepler-dev mailing list