Hi Achiya,
you are right, the output of a crossover operator is one child. A
crossover expects two solution candidates (or subscopes) and produces
one child as output which it writes to the current subscope. The
ParentCopyCrossover chooses one solution candidate randomly, but it
can't produce two childs. If you need two childs, you could remove the
ParentCopyCrossover and directly use the subscopes which the selection
operator created.
Every operator in HL has a successor which is the operator that gets
executed after the current operator. In this case the StochasticBranch
has no successor which means that after the First or SecondBranch is
executed on every subscope, the successor of the
UniformSubscopesProcessor (the predecessor of the StochasticBranch)
gets executed.
The SubScopesRemover is used to remove the two subscopes that the
selection operator created as they are not needed anymore because we
have already created a new solution candidate.
If you want to see in detail how the operators change the scopes you
can use the debug engine to have a closer look at the scope tree. You
can choose the debug engine in the Engine tab page of the algorithm
and can then right-click in the Operator Graph view on operators and
place breakpoints on them. If you click on run and switch back to the
Engine view, you can have a look at the scopes and the current values
of the parameters and step through the algorithm.
Best regards,
Andreas