public boolean mutateOrganism(Organism organism4mutation) { // before crossover
        boolean changed = false;
        int N = organism4mutation.getGenomeSize();
        for (int i = 0; i < N; i++) {
            double rand = Math.random();
            if (rand < AppProperties.coefMutateAddNode()) { // p_mutate_add_node < p_mutate_add_link!!!
                organism4mutation.getGenome().mutate_addNode(organism4mutation.getGenome().getGenes().get(i).getInnovation_num());
                changed = true;
            } else if (rand < AppProperties.coefMutateAddLink()) {
                // get second random Nodes in Network
                if (organism4mutation.getNet().getNumberHidden() != 0) {
                    organism4mutation.refreshNet();
                    Node in = organism4mutation.getGenome().getGenes().get(i).getLink().getIn_node();
                    if (in.getType() != NodeType.OUTPUT) {
                        Node out = organism4mutation.getNet().selectRandomNode(in);
                        if (out.getNodeID() != in.getNodeID()) {
                            organism4mutation.getGenome().mutate_addConnection(in, out, true);
                            changed = true;
                        }
                    }
                }
            }
        }
        //refresh Network in organism
        organism4mutation.refreshNet();
        return (changed);
    }