#!/usr/bin/env python
#####################################################################################################################################################################################################
# Project:       Juniper
# Prototype:     Cascade Correlation Neural Network
# File Name:     constants_model.py
# Author:        Paul Calnon
# Version:       0.3.1 (0.7.3)
#
# Date Created:  2025-08-02
# Last Modified: 2026-01-12
#
# License:       MIT License
# Copyright:     Copyright (c) 2024-2025 Paul Calnon
#
# Description:
#    This file contains constants used in the Cascade Correlation Neural Network implementation.
#
#####################################################################################################################################################################################################
# Notes:
#
#####################################################################################################################################################################################################
# References:
#
#####################################################################################################################################################################################################
# TODO :
#
#####################################################################################################################################################################################################
# COMPLETED:
#
#####################################################################################################################################################################################################
# import numpy as np
# import torch


#####################################################################################################################################################################################################
# Training parameters for the Cascade Correlation Network
#####################################################################################################################################################################################################


#####################################################################################################################################################################################################
# Define constants to support multiprocessing of candidate unit training

# Define authkey for multiprocessing shared queues
# _PROJECT_MODEL_AUTHKEY = b"Juniper_Cascade_Correlation_Multiprocessing_Authkey"
# _PROJECT_MODEL_AUTHKEY = b'Juniper_Cascade_Correlation_Multiprocessing_Authkey'
# _PROJECT_MODEL_AUTHKEY = 'Juniper_Cascade_Correlation_Multiprocessing_Authkey'
_PROJECT_MODEL_AUTHKEY = "Juniper_Cascade_Correlation_Multiprocessing_Authkey"

# Multiprocessing context for candidate training
# NOTE: 'forkserver' is the preferred context for parallel candidate training:
#   - Provides clean process isolation without socket inheritance issues from 'fork'
#   - Custom Manager classes work properly in Python 3.14.2+ (fixed from 3.14.0 issues)
#   - Better performance than 'spawn' for repeated process creation
# _PROJECT_MODEL_CANDIDATE_TRAINING_CONTEXT = "fork"
# _PROJECT_MODEL_CANDIDATE_TRAINING_CONTEXT = "spawn"
_PROJECT_MODEL_CANDIDATE_TRAINING_CONTEXT = "forkserver"

# Define base manager server address and port for remote multiprocessing shared queues
# _PROJECT_MODEL_BASE_MANAGER_ADDRESS = 'localhost'
_PROJECT_MODEL_BASE_MANAGER_ADDRESS_IP = "127.0.0.1"

# Use port 0 for dynamic port allocation by the OS to avoid "Address already in use" conflicts
# when multiple network instances or test runs start managers concurrently
# _PROJECT_MODEL_BASE_MANAGER_ADDRESS_PORT = 50000
_PROJECT_MODEL_BASE_MANAGER_ADDRESS_PORT = 0

_PROJECT_MODEL_WORKER_STANDBY_SLEEPYTIME = 2.0
_PROJECT_MODEL_TASK_QUEUE_TIMEOUT = 5.0
_PROJECT_MODEL_SHUTDOWN_TIMEOUT = _PROJECT_MODEL_TASK_QUEUE_TIMEOUT * 2.0

_PROJECT_MODEL_BASE_MANAGER_ADDRESS = (_PROJECT_MODEL_BASE_MANAGER_ADDRESS_IP, _PROJECT_MODEL_BASE_MANAGER_ADDRESS_PORT)

# _PROJECT_MODEL_TARGET_ACCURACY = 0.9
# _PROJECT_MODEL_TARGET_ACCURACY  = 0.99
_PROJECT_MODEL_TARGET_ACCURACY = 0.999
# _PROJECT_MODEL_TARGET_ACCURACY  = 0.9999
# _PROJECT_MODEL_TARGET_ACCURACY  = 0.99999

#####################################################################################################################################################################################################
# Define Input and Output Sizes for the Cascade Correlation Network Model
_PROJECT_MODEL_INPUT_SIZE = 2
_PROJECT_MODEL_OUTPUT_SIZE = 1


#####################################################################################################################################################################################################
# Define constants for the Cascade Correlation Network training parameters, Learning Rate
# _PROJECT_MODEL_LEARNING_RATE = 1.00
# _PROJECT_MODEL_LEARNING_RATE = 0.975
# _PROJECT_MODEL_LEARNING_RATE = 0.95
# _PROJECT_MODEL_LEARNING_RATE = 0.925
# _PROJECT_MODEL_LEARNING_RATE = 0.9
# _PROJECT_MODEL_LEARNING_RATE = 0.875
# _PROJECT_MODEL_LEARNING_RATE = 0.85
# _PROJECT_MODEL_LEARNING_RATE = 0.825
# _PROJECT_MODEL_LEARNING_RATE = 0.8
# _PROJECT_MODEL_LEARNING_RATE = 0.775
# _PROJECT_MODEL_LEARNING_RATE = 0.75
# _PROJECT_MODEL_LEARNING_RATE = 0.725
# _PROJECT_MODEL_LEARNING_RATE = 0.7
# _PROJECT_MODEL_LEARNING_RATE = 0.675
# _PROJECT_MODEL_LEARNING_RATE = 0.65
# _PROJECT_MODEL_LEARNING_RATE = 0.625
# _PROJECT_MODEL_LEARNING_RATE = 0.6
# _PROJECT_MODEL_LEARNING_RATE = 0.575
# _PROJECT_MODEL_LEARNING_RATE = 0.55
# _PROJECT_MODEL_LEARNING_RATE = 0.525
# _PROJECT_MODEL_LEARNING_RATE = 0.5
# _PROJECT_MODEL_LEARNING_RATE = 0.475
# _PROJECT_MODEL_LEARNING_RATE = 0.45
# _PROJECT_MODEL_LEARNING_RATE = 0.425
# _PROJECT_MODEL_LEARNING_RATE = 0.4
# _PROJECT_MODEL_LEARNING_RATE = 0.375
# _PROJECT_MODEL_LEARNING_RATE = 0.35
# _PROJECT_MODEL_LEARNING_RATE = 0.325
# _PROJECT_MODEL_LEARNING_RATE = 0.3
# _PROJECT_MODEL_LEARNING_RATE = 0.275
# _PROJECT_MODEL_LEARNING_RATE = 0.25
# _PROJECT_MODEL_LEARNING_RATE = 0.225
# _PROJECT_MODEL_LEARNING_RATE = 0.2
# _PROJECT_MODEL_LEARNING_RATE = 0.175
# _PROJECT_MODEL_LEARNING_RATE = 0.15
# _PROJECT_MODEL_LEARNING_RATE = 0.125
# _PROJECT_MODEL_LEARNING_RATE = 0.10
# _PROJECT_MODEL_LEARNING_RATE = 0.095
# _PROJECT_MODEL_LEARNING_RATE = 0.09
# _PROJECT_MODEL_LEARNING_RATE = 0.085
# _PROJECT_MODEL_LEARNING_RATE = 0.08
# _PROJECT_MODEL_LEARNING_RATE = 0.075
# _PROJECT_MODEL_LEARNING_RATE = 0.07
# _PROJECT_MODEL_LEARNING_RATE = 0.065
# _PROJECT_MODEL_LEARNING_RATE = 0.06
# _PROJECT_MODEL_LEARNING_RATE = 0.055
# _PROJECT_MODEL_LEARNING_RATE = 0.05
# _PROJECT_MODEL_LEARNING_RATE = 0.045
# _PROJECT_MODEL_LEARNING_RATE = 0.04
# _PROJECT_MODEL_LEARNING_RATE = 0.035
# _PROJECT_MODEL_LEARNING_RATE = 0.03
# _PROJECT_MODEL_LEARNING_RATE = 0.025
# _PROJECT_MODEL_LEARNING_RATE = 0.02
# _PROJECT_MODEL_LEARNING_RATE = 0.015
_PROJECT_MODEL_LEARNING_RATE = 0.01  # This is the default value used in the original implementation and was used with 100% run
# _PROJECT_MODEL_LEARNING_RATE = 0.0095
# _PROJECT_MODEL_LEARNING_RATE = 0.009
# _PROJECT_MODEL_LEARNING_RATE = 0.0085
# _PROJECT_MODEL_LEARNING_RATE = 0.008
# _PROJECT_MODEL_LEARNING_RATE = 0.0075
# _PROJECT_MODEL_LEARNING_RATE = 0.007
# _PROJECT_MODEL_LEARNING_RATE = 0.0065
# _PROJECT_MODEL_LEARNING_RATE = 0.006
# _PROJECT_MODEL_LEARNING_RATE = 0.0055
# _PROJECT_MODEL_LEARNING_RATE = 0.005
# _PROJECT_MODEL_LEARNING_RATE = 0.0045
# _PROJECT_MODEL_LEARNING_RATE = 0.004
# _PROJECT_MODEL_LEARNING_RATE = 0.0035
# _PROJECT_MODEL_LEARNING_RATE = 0.003
# _PROJECT_MODEL_LEARNING_RATE = 0.0025
# _PROJECT_MODEL_LEARNING_RATE = 0.002
# _PROJECT_MODEL_LEARNING_RATE = 0.0015
# _PROJECT_MODEL_LEARNING_RATE = 0.001
# _PROJECT_MODEL_LEARNING_RATE = 0.00095
# _PROJECT_MODEL_LEARNING_RATE = 0.0009
# _PROJECT_MODEL_LEARNING_RATE = 0.00085
# _PROJECT_MODEL_LEARNING_RATE = 0.0008
# _PROJECT_MODEL_LEARNING_RATE = 0.00075
# _PROJECT_MODEL_LEARNING_RATE = 0.0007
# _PROJECT_MODEL_LEARNING_RATE = 0.00065
# _PROJECT_MODEL_LEARNING_RATE = 0.0006
# _PROJECT_MODEL_LEARNING_RATE = 0.00055
# _PROJECT_MODEL_LEARNING_RATE = 0.0005
# _PROJECT_MODEL_LEARNING_RATE = 0.00045
# _PROJECT_MODEL_LEARNING_RATE = 0.0004
# _PROJECT_MODEL_LEARNING_RATE = 0.00035
# _PROJECT_MODEL_LEARNING_RATE = 0.0003
# _PROJECT_MODEL_LEARNING_RATE = 0.00025
# _PROJECT_MODEL_LEARNING_RATE = 0.0002
# _PROJECT_MODEL_LEARNING_RATE = 0.00015
# _PROJECT_MODEL_LEARNING_RATE = 0.0001
# _PROJECT_MODEL_LEARNING_RATE = 0.000095
# _PROJECT_MODEL_LEARNING_RATE = 0.00009
# _PROJECT_MODEL_LEARNING_RATE = 0.000085
# _PROJECT_MODEL_LEARNING_RATE = 0.00008
# _PROJECT_MODEL_LEARNING_RATE = 0.000075
# _PROJECT_MODEL_LEARNING_RATE = 0.00007
# _PROJECT_MODEL_LEARNING_RATE = 0.000065
# _PROJECT_MODEL_LEARNING_RATE = 0.00006
# _PROJECT_MODEL_LEARNING_RATE = 0.000055
# _PROJECT_MODEL_LEARNING_RATE = 0.00005
# _PROJECT_MODEL_LEARNING_RATE = 0.000045
# _PROJECT_MODEL_LEARNING_RATE = 0.00004
# _PROJECT_MODEL_LEARNING_RATE = 0.000035
# _PROJECT_MODEL_LEARNING_RATE = 0.00003
# _PROJECT_MODEL_LEARNING_RATE = 0.000025
# _PROJECT_MODEL_LEARNING_RATE = 0.00002
# _PROJECT_MODEL_LEARNING_RATE = 0.000015
# _PROJECT_MODEL_LEARNING_RATE = 0.00001

#####################################################################################################################################################################################################
# Define constants for the Cascade Correlation Network training parameters, Output Epochs
_PROJECT_MODEL_EPOCHS_MAX = 10000

# _PROJECT_MODEL_OUTPUT_EPOCHS = 10
# _PROJECT_MODEL_OUTPUT_EPOCHS = 20
# _PROJECT_MODEL_OUTPUT_EPOCHS = 30
# _PROJECT_MODEL_OUTPUT_EPOCHS = 40
# _PROJECT_MODEL_OUTPUT_EPOCHS = 50
# _PROJECT_MODEL_OUTPUT_EPOCHS = 60
# _PROJECT_MODEL_OUTPUT_EPOCHS = 70
# _PROJECT_MODEL_OUTPUT_EPOCHS = 80
# _PROJECT_MODEL_OUTPUT_EPOCHS = 90
# _PROJECT_MODEL_OUTPUT_EPOCHS = 100
# _PROJECT_MODEL_OUTPUT_EPOCHS = 200
# _PROJECT_MODEL_OUTPUT_EPOCHS = 300
# _PROJECT_MODEL_OUTPUT_EPOCHS = 400
# _PROJECT_MODEL_OUTPUT_EPOCHS = 500                                   # This is the default value used in the original implementation.
# _PROJECT_MODEL_OUTPUT_EPOCHS = 600
# _PROJECT_MODEL_OUTPUT_EPOCHS = 700
# _PROJECT_MODEL_OUTPUT_EPOCHS = 800
# _PROJECT_MODEL_OUTPUT_EPOCHS = 900
_PROJECT_MODEL_OUTPUT_EPOCHS = 1000  # This value was used with 100% run
# _PROJECT_MODEL_OUTPUT_EPOCHS = 1100
# _PROJECT_MODEL_OUTPUT_EPOCHS = 1200
# _PROJECT_MODEL_OUTPUT_EPOCHS = 1300
# _PROJECT_MODEL_OUTPUT_EPOCHS = 1400
# _PROJECT_MODEL_OUTPUT_EPOCHS = 1500
# _PROJECT_MODEL_OUTPUT_EPOCHS = 1600
# _PROJECT_MODEL_OUTPUT_EPOCHS = 1700
# _PROJECT_MODEL_OUTPUT_EPOCHS = 1800
# _PROJECT_MODEL_OUTPUT_EPOCHS = 1900
# _PROJECT_MODEL_OUTPUT_EPOCHS = 2000
# _PROJECT_MODEL_OUTPUT_EPOCHS = 2100
# _PROJECT_MODEL_OUTPUT_EPOCHS = 2200
# _PROJECT_MODEL_OUTPUT_EPOCHS = 2300
# _PROJECT_MODEL_OUTPUT_EPOCHS = 2400
# _PROJECT_MODEL_OUTPUT_EPOCHS = 2500
# _PROJECT_MODEL_OUTPUT_EPOCHS = 2600
# _PROJECT_MODEL_OUTPUT_EPOCHS = 2700
# _PROJECT_MODEL_OUTPUT_EPOCHS = 2800
# _PROJECT_MODEL_OUTPUT_EPOCHS = 2900
# _PROJECT_MODEL_OUTPUT_EPOCHS = 3000
# _PROJECT_MODEL_OUTPUT_EPOCHS = 3100
# _PROJECT_MODEL_OUTPUT_EPOCHS = 3200
# _PROJECT_MODEL_OUTPUT_EPOCHS = 3300
# _PROJECT_MODEL_OUTPUT_EPOCHS = 3400
# _PROJECT_MODEL_OUTPUT_EPOCHS = 3500
# _PROJECT_MODEL_OUTPUT_EPOCHS = 3600
# _PROJECT_MODEL_OUTPUT_EPOCHS = 3700
# _PROJECT_MODEL_OUTPUT_EPOCHS = 3800
# _PROJECT_MODEL_OUTPUT_EPOCHS = 3900
# _PROJECT_MODEL_OUTPUT_EPOCHS = 4000
# _PROJECT_MODEL_OUTPUT_EPOCHS = 4100
# _PROJECT_MODEL_OUTPUT_EPOCHS = 4200
# _PROJECT_MODEL_OUTPUT_EPOCHS = 4300
# _PROJECT_MODEL_OUTPUT_EPOCHS = 4400
# _PROJECT_MODEL_OUTPUT_EPOCHS = 4500
# _PROJECT_MODEL_OUTPUT_EPOCHS = 4600
# _PROJECT_MODEL_OUTPUT_EPOCHS = 4700
# _PROJECT_MODEL_OUTPUT_EPOCHS = 4800
# _PROJECT_MODEL_OUTPUT_EPOCHS = 4900
# _PROJECT_MODEL_OUTPUT_EPOCHS = 5000
# _PROJECT_MODEL_OUTPUT_EPOCHS = 5100
# _PROJECT_MODEL_OUTPUT_EPOCHS = 5200
# _PROJECT_MODEL_OUTPUT_EPOCHS = 5300
# _PROJECT_MODEL_OUTPUT_EPOCHS = 5400
# _PROJECT_MODEL_OUTPUT_EPOCHS = 5500
# _PROJECT_MODEL_OUTPUT_EPOCHS = 5600
# _PROJECT_MODEL_OUTPUT_EPOCHS = 5700
# _PROJECT_MODEL_OUTPUT_EPOCHS = 5800
# _PROJECT_MODEL_OUTPUT_EPOCHS = 5900
# _PROJECT_MODEL_OUTPUT_EPOCHS = 6000
# _PROJECT_MODEL_OUTPUT_EPOCHS = 6100
# _PROJECT_MODEL_OUTPUT_EPOCHS = 6200
# _PROJECT_MODEL_OUTPUT_EPOCHS = 6300
# _PROJECT_MODEL_OUTPUT_EPOCHS = 6400
# _PROJECT_MODEL_OUTPUT_EPOCHS = 6500
# _PROJECT_MODEL_OUTPUT_EPOCHS = 6600
# _PROJECT_MODEL_OUTPUT_EPOCHS = 6700
# _PROJECT_MODEL_OUTPUT_EPOCHS = 6800
# _PROJECT_MODEL_OUTPUT_EPOCHS = 6900
# _PROJECT_MODEL_OUTPUT_EPOCHS = 7000
# _PROJECT_MODEL_OUTPUT_EPOCHS = 7500
# _PROJECT_MODEL_OUTPUT_EPOCHS = 8000
# _PROJECT_MODEL_OUTPUT_EPOCHS = 8500
# _PROJECT_MODEL_OUTPUT_EPOCHS = 9000
# _PROJECT_MODEL_OUTPUT_EPOCHS = 9500
# _PROJECT_MODEL_OUTPUT_EPOCHS = 10000


#####################################################################################################################################################################################################
# Model parameters for the Cascade Correlation Network Model
#####################################################################################################################################################################################################
# Define constants for the Cascade Correlation Network training parameters, Max Hidden Units
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 1
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 2
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 3
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 4
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 5
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 6
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 7
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 8
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 9
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 10
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 11
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 12
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 13
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 14
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 15
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 16
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 17
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 18
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 19
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 20
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 25
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 30
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 35
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 40
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 45
_PROJECT_MODEL_MAX_HIDDEN_UNITS = 50  # This is the default value used in the original implementation.
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 55
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 60
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 65
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 70
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 75
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 80
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 85
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 90
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 95
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 100
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 105
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 110
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 115
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 120
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 125
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 130
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 135
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 140
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 145
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 150
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 155
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 160
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 165
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 170
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 175
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 180
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 185
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 190
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 195
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 200                                # This value was used with 100% run
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 210
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 220
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 230
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 240
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 250
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 260
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 270
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 280
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 290
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 300
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 350
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 400
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 450
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 500
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 550
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 600
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 650
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 700
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 750
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 800
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 850
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 900
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 950
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 1000
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 1050
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 1200
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 1250
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 1300
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 1350
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 1400
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 1450
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 1500
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 1550
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 1600
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 1650
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 1700
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 1750
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 1800
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 1850
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 1900
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 1950
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 2000
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 2500
# _PROJECT_MODEL_MAX_HIDDEN_UNITS = 3000


#####################################################################################################################################################################################################
# Define constants for the Cascade Correlation Network training parameters, Node Correlation Threshold
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.5
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.45
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.4
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.35
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.3
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.25
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.2
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.175
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.15
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.125
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.1
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.095
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.09
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.085
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.08
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.075
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.07
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.06
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.055
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.05                          # This is the default value used in the original implementation.
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.045
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.04
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.035
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.03
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.025
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.02
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.015
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.01
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.0075
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.005
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.0025
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.002
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.0015
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.001
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.0009
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.0008
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.0007
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.0006
_PROJECT_MODEL_CORRELATION_THRESHOLD = 0.0005  # This value was used with 100% run
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.0004
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.0003
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.0002
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.0001
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.00009
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.00008
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.00007
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.00006
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.00005
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.00004
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.00003
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.00002
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.00001
# _PROJECT_MODEL_CORRELATION_THRESHOLD = 0.000009

#####################################################################################################################################################################################################
# Define constants for the Cascade Correlation Network training parameters, Patience -- length of time to wait for improvement before stopping training for candidate units
# The patience is in number of epochs, so a patience of 10 means that if there is no improvement in the error for 10 consecutive epochs, the training will stop.
# NOTE: This value is meaningless if it is greater than or equal to the number of Candidate Training Epochs.
# _PROJECT_MODEL_PATIENCE = 0
# _PROJECT_MODEL_PATIENCE = 1
# _PROJECT_MODEL_PATIENCE = 2
# _PROJECT_MODEL_PATIENCE = 3
# _PROJECT_MODEL_PATIENCE = 4
# _PROJECT_MODEL_PATIENCE = 5
# _PROJECT_MODEL_PATIENCE = 6
# _PROJECT_MODEL_PATIENCE = 7
# _PROJECT_MODEL_PATIENCE = 8
# _PROJECT_MODEL_PATIENCE = 9
# _PROJECT_MODEL_PATIENCE = 10                                         # This is the default value used in the original implementation.
# _PROJECT_MODEL_PATIENCE = 12
# _PROJECT_MODEL_PATIENCE = 15
# _PROJECT_MODEL_PATIENCE = 16
# _PROJECT_MODEL_PATIENCE = 17
# _PROJECT_MODEL_PATIENCE = 18
# _PROJECT_MODEL_PATIENCE = 19
# _PROJECT_MODEL_PATIENCE = 20
# _PROJECT_MODEL_PATIENCE = 25
# _PROJECT_MODEL_PATIENCE = 30
# _PROJECT_MODEL_PATIENCE = 40
_PROJECT_MODEL_PATIENCE = 50  # This value was used with 100% run
# _PROJECT_MODEL_PATIENCE = 60
# _PROJECT_MODEL_PATIENCE = 70
# _PROJECT_MODEL_PATIENCE = 75
# _PROJECT_MODEL_PATIENCE = 80
# _PROJECT_MODEL_PATIENCE = 90
# _PROJECT_MODEL_PATIENCE = 100
# _PROJECT_MODEL_PATIENCE = 110
# _PROJECT_MODEL_PATIENCE = 120
# _PROJECT_MODEL_PATIENCE = 130
# _PROJECT_MODEL_PATIENCE = 140
# _PROJECT_MODEL_PATIENCE = 150
# _PROJECT_MODEL_PATIENCE = 160
# _PROJECT_MODEL_PATIENCE = 170
# _PROJECT_MODEL_PATIENCE = 180
# _PROJECT_MODEL_PATIENCE = 190
# _PROJECT_MODEL_PATIENCE = 200
# _PROJECT_MODEL_PATIENCE = 210
# _PROJECT_MODEL_PATIENCE = 220
# _PROJECT_MODEL_PATIENCE = 230
# _PROJECT_MODEL_PATIENCE = 240
# _PROJECT_MODEL_PATIENCE = 250
# _PROJECT_MODEL_PATIENCE = 260
# _PROJECT_MODEL_PATIENCE = 270
# _PROJECT_MODEL_PATIENCE = 280
# _PROJECT_MODEL_PATIENCE = 290
# _PROJECT_MODEL_PATIENCE = 300
# _PROJECT_MODEL_PATIENCE = 310
# _PROJECT_MODEL_PATIENCE = 320
# _PROJECT_MODEL_PATIENCE = 330
# _PROJECT_MODEL_PATIENCE = 340
# _PROJECT_MODEL_PATIENCE = 350
# _PROJECT_MODEL_PATIENCE = 360
# _PROJECT_MODEL_PATIENCE = 370
# _PROJECT_MODEL_PATIENCE = 380
# _PROJECT_MODEL_PATIENCE = 390
# _PROJECT_MODEL_PATIENCE = 400
# _PROJECT_MODEL_PATIENCE = 410
# _PROJECT_MODEL_PATIENCE = 420
# _PROJECT_MODEL_PATIENCE = 430
# _PROJECT_MODEL_PATIENCE = 440
# _PROJECT_MODEL_PATIENCE = 450
# _PROJECT_MODEL_PATIENCE = 460
# _PROJECT_MODEL_PATIENCE = 470
# _PROJECT_MODEL_PATIENCE = 480
# _PROJECT_MODEL_PATIENCE = 490
# _PROJECT_MODEL_PATIENCE = 500


#####################################################################################################################################################################################################
# Define constants for status display frequencies
#####################################################################################################################################################################################################
# Define the constant for the main loop status display frequency
_PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 10
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 20
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 50
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 75
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 100                        # This is the default value used in the original implementation.
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 125
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 150
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 175
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 200
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 250
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 300
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 350
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 400
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 450
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 500
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 550
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 600
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 650
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 700
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 750
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 800
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 900
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 1000
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 2000
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 3000
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 4000
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 5000
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 10000
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 20000
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 30000
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 40000                        # This value was used with 100% run
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 50000
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 60000
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 70000
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 80000
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 90000
# _PROJECT_MODEL_STATUS_DISPLAY_FREQUENCY = 100000

#####################################################################################################################################################################################################
# Define the constant for the Training Epoch status display frequency
# _PROJECT_MODEL_EPOCH_DISPLAY_FREQUENCY = _PROJECT_MODEL_PROJECT_STATUS_DISPLAY_FREQUENCY
# _PROJECT_MODEL_EPOCH_DISPLAY_FREQUENCY = 1
# _PROJECT_MODEL_EPOCH_DISPLAY_FREQUENCY = 5
_PROJECT_MODEL_EPOCH_DISPLAY_FREQUENCY = 10
# _PROJECT_MODEL_EPOCH_DISPLAY_FREQUENCY = 25
# _PROJECT_MODEL_EPOCH_DISPLAY_FREQUENCY = 50
# _PROJECT_MODEL_EPOCH_DISPLAY_FREQUENCY = 75
# _PROJECT_MODEL_EPOCH_DISPLAY_FREQUENCY = 100
# _PROJECT_MODEL_EPOCH_DISPLAY_FREQUENCY = 150
# _PROJECT_MODEL_EPOCH_DISPLAY_FREQUENCY = 200
# _PROJECT_MODEL_EPOCH_DISPLAY_FREQUENCY = 250
# _PROJECT_MODEL_EPOCH_DISPLAY_FREQUENCY = 300
# _PROJECT_MODEL_EPOCH_DISPLAY_FREQUENCY = 400
# _PROJECT_MODEL_EPOCH_DISPLAY_FREQUENCY = 500
# _PROJECT_MODEL_EPOCH_DISPLAY_FREQUENCY = 600
# _PROJECT_MODEL_EPOCH_DISPLAY_FREQUENCY = 700
# _PROJECT_MODEL_EPOCH_DISPLAY_FREQUENCY = 800
# _PROJECT_MODEL_EPOCH_DISPLAY_FREQUENCY = 900
# _PROJECT_MODEL_EPOCH_DISPLAY_FREQUENCY = 1000
