public Network createBindTestPattern() {

		final Network network = new Network();

		final int inputChanels = 20;

		final int hiddenNeurons = 15;

		final int outputChanels = 10;

		final Layer layer10 = new Layer();
		for (int i = 0; i < inputChanels; i++) {
			layer10.addNeuron(new Neuron(Type.INPUT));
		}
		network.addLayer(layer10);

		final Layer layer20b = new Layer();
		for (int i = 0; i < hiddenNeurons; i++) {
			layer20b.addNeuron(new Neuron());
		}
		network.addLayer(layer20b);

		final Layer layer30 = new Layer();
		for (int i = 0; i < outputChanels; i++) {
			layer30.addNeuron(new Neuron(Type.OUTPUT));
		}
		network.addLayer(layer30);

		network.meshAllNeurons();

		inputNeurons = network.getLayers().get(0).getNeurons();
		outputNeurons = network.getLayers().get(network.getLayers().size() - 1)
				.getNeurons();
		value = HashBasedTable.create();

		final int maxFrequenceFactor = outputChanels;
		numberOfPattern = 0;
		double phase = 0;
		for (int frequenceFactor = 1; frequenceFactor <= maxFrequenceFactor; frequenceFactor++) {
			for (int indexPhase = 0; indexPhase < inputChanels; indexPhase++) {
				phase += PHASE_INCRMENT * frequenceFactor;
				for (int index = 0; index < inputChanels; index++) {
					final double alpha = ALPHA_INCRMENT * index;
					final double input = 0.6 + 0.5 * Math.cos(frequenceFactor
							* alpha + phase);
					value.put(numberOfPattern, inputNeurons.get(index), input);
				}
				for (int output = 1; output <= outputChanels; output++) {
					if (output == frequenceFactor) {
						value.put(numberOfPattern,
								outputNeurons.get(output - 1), 0.9);
					} else {
						value.put(numberOfPattern,
								outputNeurons.get(output - 1), 0.1);
					}
				}
				numberOfPattern++;
			}

		}

		network.resetLinks();
		return network;
	}