• Welcome to Theos PowerBasic Museum 2017.

News:

Attachments are only available to registered users.
Please register using your full, real name.

Main Menu

OptiGen COM Library

Started by Andrew Lindsay, September 01, 2011, 01:21:30 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Andrew Lindsay

Hello,

I'm trying to get the NeuroDimensions OptiGen Library to work, unfortunately I am by no means skilled at COM interfaces and all the intricasies there-in.

I am getting an Error 533 with the following line of code...

    OBJECT SET oGA.objectiveType = enumObjectiveType.otMaximize

The actual full code, and COM interface is included below if anyone is interested and able to help.

I also believe there will be issues with the sub at the end, which appears to have an interface as a variable...

Regards

Andrew

Main Program (As is stands)
#COMPILE EXE
#DIM ALL

#INCLUDE "OptiGenCom.inc"


FUNCTION PBMAIN () AS LONG

    DIM oGA AS IGenerationalGA



    ' Create the GenerationalGA object
    'Set ga = New GenerationalGA
    oGA = ANYCOM $PROGID_OptiGenLibraryForCOM_GenerationalGA

    ' Could EXCEL be opened? If not, terminate this app
    IF ISFALSE ISOBJECT(oGA) OR ERR THEN
        PRINT "OptiGen Library could not be opened."
        PRINT "Please check Optigen Library installed."
        PRINT
        PRINT "Press any key to exit..."
        WAITKEY$
        EXIT FUNCTION
    END IF


    ' Gene Definitions
    oGA.addBinaryGeneDefinition 0
    oGA.addIntegerGeneDefinition -5, 5, 2
    oGA.addDoubleGeneDefinition -10.75, 10.75, 5.5

    ' Specify whether to minimize or maximize the objective function
    OBJECT SET oGA.objectiveType = enumObjectiveType.otMaximize

    ' Set genetic algorithm parameters to user-specified values
    OBJECT LET oGA.maxNumberOfGenerations = 250
    OBJECT LET oGA.populationSize = 25
    OBJECT LET oGA.mutationProbability = 0.005
    OBJECT LET oGA.crossoverProbability = 0.95

    ' Run the genetic algorithm
    OBJECT CALL oGA.evolve

    ' Retrieve and display the best overall result
    DIM i AS INTEGER
    DIM result AS STRING
    result = ""
    FOR i = 0 TO OBJECT GET oGA.bestChromosome.numberOfGenes - 1
        result = result & oGA.bestChromosome.genes(i).Value & ", "
    NEXT i
    ? "Best Chromosome: " & LEFT(result, LEN(result) - 2)



END FUNCTION



SUB ga_objectiveFunction(fitness AS DOUBLE, pause AS LONG, chromosome AS OptiGenLibraryForCOM.IChromosome)

    ' Objective function (Maximize/Minimize genes)
    fitness = 0
    DIM i AS INTEGER
    FOR i = 0 TO chromosome.numberOfGenes - 1
        fitness = fitness + chromosome.genes(i).Value
    NEXT i

END SUB


OptiGen.inc
' Generated by: PowerBASIC COM Browser v.2.00.0086
' Date & Time : 1/09/2011 at 6:12 PM
' Options:
' Always use an Interface Prefix : Off
' Interface Prefix               : Int_
' Prefix ProgIDs, ClassIDs...    : On
' Use ANSI Strings               : Off
' Use Singular Enumerations      : Off
' Generate Dispatch Interfaces   : Off
' Include Parameter Names        : On
' Use Property Get/Set statements: On
' ------------------------------------------------
' Library Name: OptiGenLibraryForCOM
' Library File: C:\Program Files\OptiGen Library\OptiGen Library for COM\OptiGenLibraryForCOM.dll
' Description : OptiGen Library for COM 2.0 Type Library
' GUID : {F250BE58-E6AF-4D50-AFB8-12FA9269F62D}
' LCID : 0
' Version : 2.0

' Version Dependent ProgIDs
$PROGID_OptiGenLibraryForCOM_GenerationalGA1 = "GeneticServer.GenerationalGA.1"
$PROGID_OptiGenLibraryForCOM_SteadyStateGA1 = "GeneticServer.SteadyStateGA.1"
$PROGID_OptiGenLibraryForCOM_population1 = "GeneticServer.Population.1"
$PROGID_OptiGenLibraryForCOM_chromosome1 = "GeneticServer.Chromosome.1"
$PROGID_OptiGenLibraryForCOM_Gene1 = "GeneticServer.Gene.1"
$PROGID_OptiGenLibraryForCOM_statistics1 = "GeneticServer.Statistics.1"
$PROGID_OptiGenLibraryForCOM_AttributeSelection1 = "GeneticServer.AttributeSelection.1"
$PROGID_OptiGenLibraryForCOM_NonDominatedSortingGA1 = "GeneticServer.NonDominatedSortingGA.1"
$PROGID_OptiGenLibraryForCOM_RandomNumber1 = "GeneticServer.RandomNumber.1"
$PROGID_OptiGenLibraryForCOM_SAStatistics1 = "GeneticServer.SAStatistics.1"
$PROGID_OptiGenLibraryForCOM_SimulatedAnnealing1 = "GeneticServer.SimulatedAnnealing.1"

' Version Independent ProgIDs
$PROGID_OptiGenLibraryForCOM_GenerationalGA = "GeneticServer.GenerationalGA"
$PROGID_OptiGenLibraryForCOM_SteadyStateGA = "GeneticServer.SteadyStateGA"
$PROGID_OptiGenLibraryForCOM_population = "GeneticServer.Population"
$PROGID_OptiGenLibraryForCOM_chromosome = "GeneticServer.Chromosome"
$PROGID_OptiGenLibraryForCOM_Gene = "GeneticServer.Gene"
$PROGID_OptiGenLibraryForCOM_statistics = "GeneticServer.Statistics"
$PROGID_OptiGenLibraryForCOM_AttributeSelection = "GeneticServer.AttributeSelection"
$PROGID_OptiGenLibraryForCOM_NonDominatedSortingGA = "GeneticServer.NonDominatedSortingGA"
$PROGID_OptiGenLibraryForCOM_RandomNumber = "GeneticServer.RandomNumber"
$PROGID_OptiGenLibraryForCOM_SAStatistics = "GeneticServer.SAStatistics"
$PROGID_OptiGenLibraryForCOM_SimulatedAnnealing = "GeneticServer.SimulatedAnnealing"

' Class Identifiers
$CLSID_OptiGenLibraryForCOM_GenerationalGA = GUID$("{F8619E8E-9621-11D2-8DC2-0060978D6BC9}")
$CLSID_OptiGenLibraryForCOM_Event__IGenerationalGAEvents = GUID$("{3C2AB253-C35C-4115-8921-8175391287AF}")
$CLSID_OptiGenLibraryForCOM_SteadyStateGA = GUID$("{F8619E91-9621-11D2-8DC2-0060978D6BC9}")
$CLSID_OptiGenLibraryForCOM_Event__ISteadyStateGAEvents = GUID$("{181F3946-9D1D-4C84-8BDD-D620D337A5F4}")
$CLSID_OptiGenLibraryForCOM_population = GUID$("{BBD54DC3-9FD3-11D2-8DC2-0060978D6BC9}")
$CLSID_OptiGenLibraryForCOM_chromosome = GUID$("{BBD54DC5-9FD3-11D2-8DC2-0060978D6BC9}")
$CLSID_OptiGenLibraryForCOM_Gene = GUID$("{BBD54DC7-9FD3-11D2-8DC2-0060978D6BC9}")
$CLSID_OptiGenLibraryForCOM_statistics = GUID$("{CF13AC06-C0CC-11D2-8DC2-0060978D6BC9}")
$CLSID_OptiGenLibraryForCOM_AttributeSelection = GUID$("{E4E1E7C8-A7E9-48AE-96AB-7B58B057BC36}")
$CLSID_OptiGenLibraryForCOM_Event__IAttributeSelectionEvents = GUID$("{756F089A-0923-4EE0-BE8F-D53A53ECD983}")
$CLSID_OptiGenLibraryForCOM_NonDominatedSortingGA = GUID$("{C3697541-3D17-4F22-85E3-A3F3B4D64D31}")
$CLSID_OptiGenLibraryForCOM_Event__INonDominatedSortingGAEvents = GUID$("{25428F4E-FC62-4E9E-8175-9FC0DE4DEB1A}")
$CLSID_OptiGenLibraryForCOM_MOGene = GUID$("{636AB1EA-7E7B-43CA-8C26-9F42BF353D90}")
$CLSID_OptiGenLibraryForCOM_MOChromosome = GUID$("{0B51973E-E5AA-4277-AECC-E1331C4566BE}")
$CLSID_OptiGenLibraryForCOM_MOPopulation = GUID$("{ED6FBAE9-E74B-4047-BE6D-C70C0B242F7D}")
$CLSID_OptiGenLibraryForCOM_MOStatistics = GUID$("{AA9CF668-532A-46A3-B301-782F23E875AC}")
$CLSID_OptiGenLibraryForCOM_Objective = GUID$("{D0CC6895-EB64-4B28-8AE2-F879AD1E995A}")
$CLSID_OptiGenLibraryForCOM_Constrain = GUID$("{08AD60D6-2CD1-4981-8F44-722FA3DD7C76}")
$CLSID_OptiGenLibraryForCOM_RandomNumber = GUID$("{E1D16907-29FF-4CF6-AD46-0AC823097F3A}")
$CLSID_OptiGenLibraryForCOM_SAStatistics = GUID$("{70C776AB-DDF1-4A0D-B888-058C0A38A80C}")
$CLSID_OptiGenLibraryForCOM_SimulatedAnnealing = GUID$("{FEF3FA5C-B121-4B45-9481-46EF296ADD80}")
$CLSID_OptiGenLibraryForCOM_Event__ISimulatedAnnealingEvents = GUID$("{E18E5F4E-92EA-4A04-8428-EE860588BEE2}")

' Interface Identifiers
$IID_OptiGenLibraryForCOM_IGenerationalGA = GUID$("{F8619E8D-9621-11D2-8DC2-0060978D6BC9}")
$IID_OptiGenLibraryForCOM_IPopulation = GUID$("{BBD54DC2-9FD3-11D2-8DC2-0060978D6BC9}")
$IID_OptiGenLibraryForCOM_IChromosome = GUID$("{BBD54DC4-9FD3-11D2-8DC2-0060978D6BC9}")
$IID_OptiGenLibraryForCOM_IGene = GUID$("{BBD54DC6-9FD3-11D2-8DC2-0060978D6BC9}")
$IID_OptiGenLibraryForCOM_IStatistics = GUID$("{CF13AC05-C0CC-11D2-8DC2-0060978D6BC9}")
$IID_OptiGenLibraryForCOM_Int__IGenerationalGAEvents = GUID$("{F8619E8F-9621-11D2-8DC2-0060978D6BC9}")
$IID_OptiGenLibraryForCOM_ISteadyStateGA = GUID$("{F8619E90-9621-11D2-8DC2-0060978D6BC9}")
$IID_OptiGenLibraryForCOM_Int__ISteadyStateGAEvents = GUID$("{F8619E92-9621-11D2-8DC2-0060978D6BC9}")
$IID_OptiGenLibraryForCOM_IAttributeSelection = GUID$("{944A41B9-0335-4A3B-B1C3-BE435B4478BC}")
$IID_OptiGenLibraryForCOM_IMOChromosome = GUID$("{17E37640-9FB6-41B9-99DB-929268FA9AA5}")
$IID_OptiGenLibraryForCOM_IMOGene = GUID$("{0AFEBD5E-ECB0-499E-AF4F-E7920C5D034E}")
$IID_OptiGenLibraryForCOM_IObjective = GUID$("{CAB5DBB8-2DB2-44AE-A930-D890253A401B}")
$IID_OptiGenLibraryForCOM_IConstrain = GUID$("{487716D3-6A9A-4521-8A0A-C3C738B4F0BB}")
$IID_OptiGenLibraryForCOM_Int__IAttributeSelectionEvents = GUID$("{7FFA3E15-6030-45E0-9E47-C9864F124F9F}")
$IID_OptiGenLibraryForCOM_INonDominatedSortingGA = GUID$("{33B63F6A-85D8-4803-83BF-382F1347F511}")
$IID_OptiGenLibraryForCOM_IMOPopulation = GUID$("{7CB9D8E8-63C0-447F-B0A2-19203F4FC794}")
$IID_OptiGenLibraryForCOM_IMOStatistics = GUID$("{625DD4B5-87C3-4750-93B7-1711C1FFB666}")
$IID_OptiGenLibraryForCOM_Int__INonDominatedSortingGAEvents = GUID$("{8D4F569B-8AB6-4E37-A469-4E7E680B638B}")
$IID_OptiGenLibraryForCOM_IRandomNumber = GUID$("{D5C282ED-71CC-44F9-8897-134EC2505BA5}")
$IID_OptiGenLibraryForCOM_ISAStatistics = GUID$("{6D76A57E-3254-4D65-97CC-A1FF1E652EFB}")
$IID_OptiGenLibraryForCOM_Int__ISimulatedAnnealingEvents = GUID$("{5498DB09-DD4D-4B52-8473-CE0232C336AE}")
$IID_OptiGenLibraryForCOM_ISimulatedAnnealing = GUID$("{1FC4AB97-6E71-45E1-8C82-09EA081E5A29}")

ENUM enumObjectiveType
    otMinimize = 0
    otMaximize = 1
END ENUM

ENUM enumBinaryMutationType
    bmFlipBitMutation = 0
END ENUM

ENUM enumIntegerMutationType
    imGaussianMutation = 1
    imUniformMutation = 2
    imBoundaryMutation = 3
    imNonUniformMutation = 4
    imSwapMutation = 6
END ENUM

ENUM enumDoubleMutationType
    fmGaussianMutation = 1
    fmUniformMutation = 2
    fmBoundaryMutation = 3
    fmNonUniformMutation = 4
    fmCauchyMutation = 7
END ENUM

ENUM enumGeneType
    gtBinaryGene = 0
    gtIntegerGene = 1
    gtFloatGene = 2
END ENUM

ENUM enumInitializationType
    itNormalInitialization = 0
    itUniqueInitialization = 1
END ENUM

ENUM enumSelectionType
    stRouletteSelection = 0
    stTournamentSelection = 1
    stRandomSelection = 2
    stBestSelection = 3
    stTopPercentSelection = 4
END ENUM

ENUM enumRouletteSelectionBasis
    rsFitnessBasis = 0
    rsRankBasis = 1
END ENUM

ENUM enumCrossoverType
    ctOnePointCrossover = 0
    ctTwoPointCrossover = 1
    ctUniformCrossover = 2
    ctArithemeticCrossover = 3
    ctHeuristicCrossover = 4
    ctGreedyCrossover = 6
END ENUM

ENUM enumTerminationType
    ttNoTermination = 0
    ttEvolutionTimeTermination = 1
    ttFitnessThresholdTermination = 2
    ttFitnessConvergenceTermination = 4
    ttPopulationConvergenceTermination = 8
    ttGeneConvergenceTermination = 16
    ttMaxIterationsWithoutImprovement = 32
    ttHyperVolumeConvergenceTermination = 64
    ttGreedyBackEliminationTermination = 128
    ttSAMinTemperatureTermination = 256
END ENUM

ENUM enumConstraintType
    ctLessThan = 0
    ctGreaterThan = 1
    ctEqual = 2
END ENUM

ENUM enumObjectiveBoundType
    obtFixed = 0
    obtDynamic = 1
END ENUM

ENUM enumAttributeSelectionSearchType
    astGreedySearch = 0
    astBackElimination = 1
    astExhaustive = 2
END ENUM

ENUM enumObjectiveFunctionType
    oftExternal = 0
    oftInternalClustering = 1
    oftSymmetricUncertainty = 2
END ENUM


' Interface Name  : IGenerationalGA
' Description     : IGenerationalGA Interface
' Class Name      : GenerationalGA
' ClassID         : $CLSID_OptiGenLibraryForCOM_GenerationalGA
' ProgID          : $PROGID_OptiGenLibraryForCOM_GenerationalGA
' Version ProgID  : $PROGID_OptiGenLibraryForCOM_GenerationalGA1
INTERFACE IGenerationalGA $IID_OptiGenLibraryForCOM_IGenerationalGA
    INHERIT IDISPATCH

    METHOD evolve <1> ()
    PROPERTY GET objectiveType <2> () AS LONG
    PROPERTY SET objectiveType <2> (BYVAL pVal AS LONG)
    PROPERTY GET population <3> () AS IPopulation
    METHOD addBinaryGeneDefinition <4> (OPT BYVAL initialValue AS DOUBLE, OPT BYVAL mutationType AS LONG)
    METHOD addIntegerGeneDefinition <5> (BYVAL lowerBound AS DOUBLE, BYVAL upperBound AS DOUBLE, OPT BYVAL initialValue AS _
        DOUBLE, OPT BYVAL mutationType AS LONG)
    PROPERTY GET maxNumberOfGenerations <6> () AS LONG
    PROPERTY SET maxNumberOfGenerations <6> (BYVAL pVal AS LONG)
    PROPERTY GET bestChromosome <7> (OPT BYVAL evaluateIfNecessary AS INTEGER) AS IChromosome
    METHOD addDoubleGeneDefinition <8> (BYVAL lowerBound AS DOUBLE, BYVAL upperBound AS DOUBLE, OPT BYVAL initialValue AS _
        DOUBLE, OPT BYVAL mutationType AS LONG)
    METHOD setDefaultParameters <9> ()
    PROPERTY GET populationSize <10> () AS LONG
    PROPERTY SET populationSize <10> (BYVAL pVal AS LONG)
    PROPERTY GET checkForMatchingChromosome <11> () AS INTEGER
    PROPERTY SET checkForMatchingChromosome <11> (BYVAL pVal AS INTEGER)
    METHOD RESET <12> (OPT BYVAL useInitialValues AS INTEGER)
    METHOD updateGeneDefinition <13> (BYVAL index AS LONG, BYVAL geneType AS LONG, BYVAL lowerBound AS DOUBLE, BYVAL _
        upperBound AS DOUBLE, BYVAL initialValue AS DOUBLE, BYVAL mutationType AS LONG)
    METHOD removeGeneDefinition <14> (BYVAL index AS LONG)
    PROPERTY GET numberOfGeneDefinitions <15> () AS LONG
    PROPERTY GET selectionType <16> () AS LONG
    PROPERTY SET selectionType <16> (BYVAL pVal AS LONG)
    PROPERTY GET rouletteSelectionBasis <17> () AS LONG
    PROPERTY SET rouletteSelectionBasis <17> (BYVAL pVal AS LONG)
    PROPERTY GET tournamentSelectionSize <18> () AS LONG
    PROPERTY SET tournamentSelectionSize <18> (BYVAL pVal AS LONG)
    PROPERTY GET topPercentSelectionPercentage <19> () AS DOUBLE
    PROPERTY SET topPercentSelectionPercentage <19> (BYVAL pVal AS DOUBLE)
    PROPERTY GET crossoverType <20> () AS LONG
    PROPERTY SET crossoverType <20> (BYVAL pVal AS LONG)
    PROPERTY GET crossoverProbability <21> () AS DOUBLE
    PROPERTY SET crossoverProbability <21> (BYVAL pVal AS DOUBLE)
    PROPERTY GET uniformCrossoverMixingRatio <22> () AS DOUBLE
    PROPERTY SET uniformCrossoverMixingRatio <22> (BYVAL pVal AS DOUBLE)
    PROPERTY GET heuristicCrossoverTries <23> () AS LONG
    PROPERTY SET heuristicCrossoverTries <23> (BYVAL pVal AS LONG)
    PROPERTY GET mutationProbability <24> () AS DOUBLE
    PROPERTY SET mutationProbability <24> (BYVAL pVal AS DOUBLE)
    PROPERTY GET terminationType <25> () AS LONG
    PROPERTY SET terminationType <25> (BYVAL pVal AS LONG)
    PROPERTY GET maximumEvolutionTime <26> () AS LONG
    PROPERTY SET maximumEvolutionTime <26> (BYVAL pVal AS LONG)
    PROPERTY GET allowTerminationDuringEvaluation <27> () AS INTEGER
    PROPERTY SET allowTerminationDuringEvaluation <27> (BYVAL pVal AS INTEGER)
    PROPERTY GET fitnessThreshold <28> () AS DOUBLE
    PROPERTY SET fitnessThreshold <28> (BYVAL pVal AS DOUBLE)
    PROPERTY GET fitnessConvergenceThreshold <29> () AS DOUBLE
    PROPERTY SET fitnessConvergenceThreshold <29> (BYVAL pVal AS DOUBLE)
    PROPERTY GET populationConvergenceThreshold <30> () AS DOUBLE
    PROPERTY SET populationConvergenceThreshold <30> (BYVAL pVal AS DOUBLE)
    PROPERTY GET geneConvergenceThreshold <31> () AS DOUBLE
    PROPERTY SET geneConvergenceThreshold <31> (BYVAL pVal AS DOUBLE)
    PROPERTY GET geneConvergencePercentage <32> () AS DOUBLE
    PROPERTY SET geneConvergencePercentage <32> (BYVAL pVal AS DOUBLE)
    PROPERTY GET computeStatisticsEvery <33> () AS LONG
    PROPERTY SET computeStatisticsEvery <33> (BYVAL pVal AS LONG)
    PROPERTY GET numberOfStatistics <34> () AS LONG
    PROPERTY GET statistics <36> (BYVAL index AS LONG) AS IStatistics
    PROPERTY GET numberOfGenerations <37> () AS LONG
    PROPERTY GET elapsedTime <38> () AS LONG
    PROPERTY GET saveBestChromosome <39> () AS INTEGER
    PROPERTY SET saveBestChromosome <39> (BYVAL pVal AS INTEGER)
    PROPERTY GET bestChromosomeGeneration <40> () AS LONG
    METHOD seedRandom <41> (BYVAL seed AS LONG)
    PROPERTY GET useElitism <42> () AS INTEGER
    PROPERTY SET useElitism <42> (BYVAL pVal AS INTEGER)
    PROPERTY GET gaussianMutationTries <43> () AS LONG
    PROPERTY SET gaussianMutationTries <43> (BYVAL pVal AS LONG)
    PROPERTY GET initializationType <44> () AS LONG
    PROPERTY SET initializationType <44> (BYVAL pVal AS LONG)
    METHOD retrieveStates <45> (BYVAL states AS DWORD)
    METHOD restoreStates <46> (BYVAL states AS DWORD)
    METHOD writeStatesToFile <47> (BYVAL filePathName AS WSTRING)
    METHOD loadStatesFromFile <48> (BYVAL filePathName AS WSTRING)
    METHOD evolveSingleStep <49> ()
    PROPERTY GET terminated <50> () AS INTEGER
    METHOD writeStatisticsToFile <35> (BYVAL filePathName AS WSTRING, OPT BYVAL useExponentialNotatation AS INTEGER)
    PROPERTY GET maxIterationsWithoutImprovement <51> () AS LONG
    PROPERTY SET maxIterationsWithoutImprovement <51> (BYVAL pVal AS LONG)
END INTERFACE

' Interface Name  : IPopulation
' Description     : IPopulation Interface
' Class Name      : population
' ClassID         : $CLSID_OptiGenLibraryForCOM_population
' ProgID          : $PROGID_OptiGenLibraryForCOM_population
' Version ProgID  : $PROGID_OptiGenLibraryForCOM_population1
INTERFACE IPopulation $IID_OptiGenLibraryForCOM_IPopulation
    INHERIT IDISPATCH

    PROPERTY GET numberOfChromosomes <1> () AS LONG
    PROPERTY GET chromosomes <2> (BYVAL index AS LONG) AS IChromosome
    METHOD initialize <3> ()
    METHOD evaluate <4> (OPT BYVAL chromosomeIndex AS LONG)
    METHOD SORT <5> ()
    METHOD writePopulationToFile <6> (BYVAL filePathName AS WSTRING, OPT BYVAL sortPopulation AS INTEGER, OPT BYVAL _
        useExponentialNotation AS INTEGER)
    PROPERTY GET bestChromosome <7> (OPT BYVAL evaluateIfNecessary AS INTEGER) AS IChromosome
    PROPERTY GET worstChromosome <8> (OPT BYVAL evaluateIfNecessary AS INTEGER) AS IChromosome
    PROPERTY GET averageFitness <9> (OPT BYVAL evaluateIfNecessary AS INTEGER) AS DOUBLE
    PROPERTY GET stdDevFitness <10> (OPT BYVAL evaluateIfNecessary AS INTEGER, OPT BYVAL averageFitness AS DOUBLE) AS DOUBLE
    PROPERTY GET minimumFitness <11> (OPT BYVAL evaluateIfNecessary AS INTEGER) AS DOUBLE
    PROPERTY GET maximumFitness <12> (OPT BYVAL evaluateIfNecessary AS INTEGER) AS DOUBLE
END INTERFACE

' Interface Name  : IChromosome
' Description     : IChromosome Interface
' Class Name      : chromosome
' ClassID         : $CLSID_OptiGenLibraryForCOM_chromosome
' ProgID          : $PROGID_OptiGenLibraryForCOM_chromosome
' Version ProgID  : $PROGID_OptiGenLibraryForCOM_chromosome1
INTERFACE IChromosome $IID_OptiGenLibraryForCOM_IChromosome
    INHERIT IDISPATCH

    PROPERTY GET fitness <1> () AS DOUBLE
    PROPERTY GET genes <2> (BYVAL index AS LONG) AS IGene
    PROPERTY GET numberOfGenes <3> () AS LONG
END INTERFACE

' Interface Name  : IGene
' Description     : IGene Interface
' Class Name      : Gene
' ClassID         : $CLSID_OptiGenLibraryForCOM_Gene
' ProgID          : $PROGID_OptiGenLibraryForCOM_Gene
' Version ProgID  : $PROGID_OptiGenLibraryForCOM_Gene1
INTERFACE IGene $IID_OptiGenLibraryForCOM_IGene
    INHERIT IDISPATCH

    PROPERTY GET value <1> () AS DOUBLE
    PROPERTY SET value <1> (BYVAL pVal AS DOUBLE)
END INTERFACE

' Interface Name  : IStatistics
' Description     : IStatistics Interface
' Class Name      : statistics
' ClassID         : $CLSID_OptiGenLibraryForCOM_statistics
' ProgID          : $PROGID_OptiGenLibraryForCOM_statistics
' Version ProgID  : $PROGID_OptiGenLibraryForCOM_statistics1
INTERFACE IStatistics $IID_OptiGenLibraryForCOM_IStatistics
    INHERIT IDISPATCH

    PROPERTY GET generationNumber <1> () AS LONG
    PROPERTY GET minimumFitness <2> () AS DOUBLE
    PROPERTY GET maximumFitness <3> () AS DOUBLE
    PROPERTY GET averageFitness <4> () AS DOUBLE
    PROPERTY GET stdDevFitness <5> () AS DOUBLE
END INTERFACE

' Interface Name  : Int__IGenerationalGAEvents
' Description     : _IGenerationalGAEvents Interface
' ClassID         : $CLSID_OptiGenLibraryForCOM_Event__IGenerationalGAEvents
' ProgID          : $PROGID_OptiGenLibraryForCOM_GenerationalGA
' Version ProgID  : $PROGID_OptiGenLibraryForCOM_GenerationalGA1
CLASS Class_Int__IGenerationalGAEvents $CLSID_OptiGenLibraryForCOM_Event__IGenerationalGAEvents AS EVENT
    INTERFACE Int__IGenerationalGAEvents $IID_OptiGenLibraryForCOM_Int__IGenerationalGAEvents
        INHERIT IDISPATCH

        METHOD objectiveFunction <1> (BYREF fitness AS DOUBLE, BYREF pause AS INTEGER, BYREF IN chromosome AS IChromosome)
            ' Insert your code here
        END METHOD

        METHOD generationEnded <2> ()
            ' Insert your code here
        END METHOD

        METHOD greedyCrossoverObjFn <3> (BYREF fitness AS DOUBLE, BYVAL gene1Value AS LONG, BYVAL gene2Value AS LONG)
            ' Insert your code here
        END METHOD

    END INTERFACE
END CLASS

' Interface Name  : ISteadyStateGA
' Description     : ISteadyStateGA Interface
' Class Name      : SteadyStateGA
' ClassID         : $CLSID_OptiGenLibraryForCOM_SteadyStateGA
' ProgID          : $PROGID_OptiGenLibraryForCOM_SteadyStateGA
' Version ProgID  : $PROGID_OptiGenLibraryForCOM_SteadyStateGA1
INTERFACE ISteadyStateGA $IID_OptiGenLibraryForCOM_ISteadyStateGA
    INHERIT IDISPATCH

    METHOD evolve <1> ()
    PROPERTY GET objectiveType <2> () AS LONG
    PROPERTY SET objectiveType <2> (BYVAL pVal AS LONG)
    PROPERTY GET population <3> () AS IPopulation
    METHOD addBinaryGeneDefinition <4> (OPT BYVAL initialValue AS DOUBLE, OPT BYVAL mutationType AS LONG)
    METHOD addIntegerGeneDefinition <5> (BYVAL lowerBound AS DOUBLE, BYVAL upperBound AS DOUBLE, OPT BYVAL initialValue AS _
        DOUBLE, OPT BYVAL mutationType AS LONG)
    PROPERTY GET maxNumberOfGenerations <6> () AS LONG
    PROPERTY SET maxNumberOfGenerations <6> (BYVAL pVal AS LONG)
    PROPERTY GET bestChromosome <7> (OPT BYVAL evaluateIfNecessary AS INTEGER) AS IChromosome
    METHOD addDoubleGeneDefinition <8> (BYVAL lowerBound AS DOUBLE, BYVAL upperBound AS DOUBLE, OPT BYVAL initialValue AS _
        DOUBLE, OPT BYVAL mutationType AS LONG)
    METHOD setDefaultParameters <9> ()
    PROPERTY GET populationSize <10> () AS LONG
    PROPERTY SET populationSize <10> (BYVAL pVal AS LONG)
    PROPERTY GET checkForMatchingChromosome <11> () AS INTEGER
    PROPERTY SET checkForMatchingChromosome <11> (BYVAL pVal AS INTEGER)
    METHOD RESET <12> (OPT BYVAL useInitialValues AS INTEGER)
    METHOD updateGeneDefinition <13> (BYVAL index AS LONG, BYVAL geneType AS LONG, BYVAL lowerBound AS DOUBLE, BYVAL _
        upperBound AS DOUBLE, BYVAL initialValue AS DOUBLE, BYVAL mutationType AS LONG)
    METHOD removeGeneDefinition <14> (BYVAL index AS LONG)
    PROPERTY GET numberOfGeneDefinitions <15> () AS LONG
    PROPERTY GET selectionType <16> () AS LONG
    PROPERTY SET selectionType <16> (BYVAL pVal AS LONG)
    PROPERTY GET rouletteSelectionBasis <17> () AS LONG
    PROPERTY SET rouletteSelectionBasis <17> (BYVAL pVal AS LONG)
    PROPERTY GET tournamentSelectionSize <18> () AS LONG
    PROPERTY SET tournamentSelectionSize <18> (BYVAL pVal AS LONG)
    PROPERTY GET topPercentSelectionPercentage <19> () AS DOUBLE
    PROPERTY SET topPercentSelectionPercentage <19> (BYVAL pVal AS DOUBLE)
    PROPERTY GET crossoverType <20> () AS LONG
    PROPERTY SET crossoverType <20> (BYVAL pVal AS LONG)
    PROPERTY GET crossoverProbability <21> () AS DOUBLE
    PROPERTY SET crossoverProbability <21> (BYVAL pVal AS DOUBLE)
    PROPERTY GET uniformCrossoverMixingRatio <22> () AS DOUBLE
    PROPERTY SET uniformCrossoverMixingRatio <22> (BYVAL pVal AS DOUBLE)
    PROPERTY GET heuristicCrossoverTries <23> () AS LONG
    PROPERTY SET heuristicCrossoverTries <23> (BYVAL pVal AS LONG)
    PROPERTY GET mutationProbability <24> () AS DOUBLE
    PROPERTY SET mutationProbability <24> (BYVAL pVal AS DOUBLE)
    PROPERTY GET terminationType <25> () AS LONG
    PROPERTY SET terminationType <25> (BYVAL pVal AS LONG)
    PROPERTY GET maximumEvolutionTime <26> () AS LONG
    PROPERTY SET maximumEvolutionTime <26> (BYVAL pVal AS LONG)
    PROPERTY GET allowTerminationDuringEvaluation <27> () AS INTEGER
    PROPERTY SET allowTerminationDuringEvaluation <27> (BYVAL pVal AS INTEGER)
    PROPERTY GET fitnessThreshold <28> () AS DOUBLE
    PROPERTY SET fitnessThreshold <28> (BYVAL pVal AS DOUBLE)
    PROPERTY GET fitnessConvergenceThreshold <29> () AS DOUBLE
    PROPERTY SET fitnessConvergenceThreshold <29> (BYVAL pVal AS DOUBLE)
    PROPERTY GET populationConvergenceThreshold <30> () AS DOUBLE
    PROPERTY SET populationConvergenceThreshold <30> (BYVAL pVal AS DOUBLE)
    PROPERTY GET geneConvergenceThreshold <31> () AS DOUBLE
    PROPERTY SET geneConvergenceThreshold <31> (BYVAL pVal AS DOUBLE)
    PROPERTY GET geneConvergencePercentage <32> () AS DOUBLE
    PROPERTY SET geneConvergencePercentage <32> (BYVAL pVal AS DOUBLE)
    PROPERTY GET computeStatisticsEvery <33> () AS LONG
    PROPERTY SET computeStatisticsEvery <33> (BYVAL pVal AS LONG)
    PROPERTY GET numberOfStatistics <34> () AS LONG
    METHOD writeStatisticsToFile <35> (BYVAL filePathName AS WSTRING, OPT BYVAL useExponentialNotatation AS INTEGER)
    PROPERTY GET statistics <36> (BYVAL index AS LONG) AS IStatistics
    PROPERTY GET numberOfGenerations <37> () AS LONG
    PROPERTY GET elapsedTime <38> () AS LONG
    PROPERTY GET saveBestChromosome <39> () AS INTEGER
    PROPERTY SET saveBestChromosome <39> (BYVAL pVal AS INTEGER)
    PROPERTY GET bestChromosomeGeneration <40> () AS LONG
    METHOD seedRandom <41> (BYVAL seed AS LONG)
    PROPERTY GET gaussianMutationTries <42> () AS LONG
    PROPERTY SET gaussianMutationTries <42> (BYVAL pVal AS LONG)
    PROPERTY GET initializationType <43> () AS LONG
    PROPERTY SET initializationType <43> (BYVAL pVal AS LONG)
    METHOD retrieveStates <44> (BYVAL states AS DWORD)
    METHOD restoreStates <45> (BYVAL states AS DWORD)
    METHOD writeStatesToFile <46> (BYVAL filePathName AS WSTRING)
    METHOD loadStatesFromFile <47> (BYVAL filePathName AS WSTRING)
    METHOD evolveSingleStep <48> ()
    PROPERTY GET terminated <49> () AS INTEGER
    PROPERTY GET maxIterationsWithoutImprovement <50> () AS LONG
    PROPERTY SET maxIterationsWithoutImprovement <50> (BYVAL pVal AS LONG)
END INTERFACE

' Interface Name  : Int__ISteadyStateGAEvents
' Description     : _ISteadyStateGAEvents Interface
' ClassID         : $CLSID_OptiGenLibraryForCOM_Event__ISteadyStateGAEvents
' ProgID          : $PROGID_OptiGenLibraryForCOM_SteadyStateGA
' Version ProgID  : $PROGID_OptiGenLibraryForCOM_SteadyStateGA1
CLASS Class_Int__ISteadyStateGAEvents $CLSID_OptiGenLibraryForCOM_Event__ISteadyStateGAEvents AS EVENT
    INTERFACE Int__ISteadyStateGAEvents $IID_OptiGenLibraryForCOM_Int__ISteadyStateGAEvents
        INHERIT IDISPATCH

        METHOD objectiveFunction <1> (BYREF fitness AS DOUBLE, BYREF pause AS INTEGER, BYREF IN chromosome AS IChromosome)
            ' Insert your code here
        END METHOD

        METHOD generationEnded <2> ()
            ' Insert your code here
        END METHOD

        METHOD greedyCrossoverObjFn <3> (BYREF fitness AS DOUBLE, BYVAL gene1Value AS LONG, BYVAL gene2Value AS LONG)
            ' Insert your code here
        END METHOD

    END INTERFACE
END CLASS

' Interface Name  : IAttributeSelection
' Description     : IAttributeSelection Interface
' Class Name      : AttributeSelection
' ClassID         : $CLSID_OptiGenLibraryForCOM_AttributeSelection
' ProgID          : $PROGID_OptiGenLibraryForCOM_AttributeSelection
' Version ProgID  : $PROGID_OptiGenLibraryForCOM_AttributeSelection1
INTERFACE IAttributeSelection $IID_OptiGenLibraryForCOM_IAttributeSelection
    INHERIT IDISPATCH

    METHOD evolve <1> ()
    PROPERTY GET objectiveType <2> () AS LONG
    PROPERTY SET objectiveType <2> (BYVAL pVal AS LONG)
    METHOD addAttributes <4> (BYVAL iNumberOfAttributes AS LONG)
    PROPERTY GET maxNumberOfIterations <5> () AS LONG
    PROPERTY SET maxNumberOfIterations <5> (BYVAL pVal AS LONG)
    PROPERTY GET bestChromosome <6> (OPT BYVAL evaluateIfNecessary AS INTEGER) AS IMOChromosome
    METHOD RESET <7> (OPT BYVAL useInitialValues AS INTEGER)
    PROPERTY GET maximumEvolutionTime <8> () AS LONG
    PROPERTY SET maximumEvolutionTime <8> (BYVAL pVal AS LONG)
    PROPERTY GET computeStatisticsEvery <10> () AS LONG
    PROPERTY SET computeStatisticsEvery <10> (BYVAL pVal AS LONG)
    PROPERTY GET numberOfStatistics <11> () AS LONG
    PROPERTY GET statistics <12> (BYVAL index AS LONG) AS IStatistics
    PROPERTY GET numberOfGenerations <13> () AS LONG
    PROPERTY GET elapsedTime <14> () AS LONG
    PROPERTY GET terminated <17> () AS INTEGER
    METHOD writeStatisticsToFile <18> (BYVAL filePathName AS WSTRING, OPT BYVAL useExponentialNotation AS INTEGER)
    PROPERTY GET attributeSelectionSearchType <19> () AS LONG
    PROPERTY SET attributeSelectionSearchType <19> (BYVAL pVal AS LONG)
    PROPERTY GET numberOfAttributes <20> () AS LONG
    PROPERTY GET eliteSize <21> () AS LONG
    PROPERTY SET eliteSize <21> (BYVAL pVal AS LONG)
    PROPERTY GET objectiveFunctionType <22> () AS LONG
    PROPERTY SET objectiveFunctionType <22> (BYVAL pVal AS LONG)
    METHOD enableInternalObjectiveFunction <23> (BYVAL pInputArray AS DWORD, BYVAL pDesiredOutputArray AS DWORD, BYVAL _
        objType AS LONG)
    PROPERTY GET lagsOfAttributes <24> (BYVAL index AS LONG) AS LONG
    PROPERTY SET lagsOfAttributes <24> (BYVAL index AS LONG, BYVAL pVal AS LONG)
    PROPERTY GET numberOfIntervalsOfAttributes <25> (BYVAL index AS LONG) AS LONG
    PROPERTY SET numberOfIntervalsOfAttributes <25> (BYVAL index AS LONG, BYVAL pVal AS LONG)
    PROPERTY GET isAttributeAnalog <26> (BYVAL index AS LONG) AS INTEGER
    PROPERTY SET isAttributeAnalog <26> (BYVAL index AS LONG, BYVAL pVal AS INTEGER)
    METHOD InitializationForInternalObjectiveFunction <27> (BYVAL trainPortion AS DOUBLE, BYVAL CVPortion AS DOUBLE, BYVAL _
        testPortion AS DOUBLE, BYVAL PB_randomize AS INTEGER)
    PROPERTY GET bestSolution <28> (OPT BYVAL evaluateIfNecessary AS INTEGER) AS IMOChromosome
    PROPERTY GET numberOfIterations <29> () AS LONG
    PROPERTY GET maxIterationWithoutImprovement <30> () AS LONG
    PROPERTY SET maxIterationWithoutImprovement <30> (BYVAL pVal AS LONG)
    PROPERTY GET terminationType <31> () AS LONG
    PROPERTY SET terminationType <31> (BYVAL pVal AS LONG)
END INTERFACE

' Interface Name  : IMOChromosome
' Description     : IMOChromosome Interface
' Class Name      : MOChromosome
' ClassID         : $CLSID_OptiGenLibraryForCOM_MOChromosome
INTERFACE IMOChromosome $IID_OptiGenLibraryForCOM_IMOChromosome
    INHERIT IDISPATCH

    PROPERTY GET fitness <1> () AS DOUBLE
    PROPERTY GET genes <2> (BYVAL index AS LONG) AS IMOGene
    PROPERTY GET numberOfGenes <3> () AS LONG
    PROPERTY GET objectives <4> (BYVAL index AS LONG) AS IObjective
    PROPERTY GET numberOfObjectives <5> () AS LONG
    PROPERTY GET numberOfConstraints <6> () AS LONG
    PROPERTY GET constraints <7> (BYVAL index AS LONG) AS IConstrain
END INTERFACE

' Interface Name  : IMOGene
' Description     : IMOGene Interface
' Class Name      : MOGene
' ClassID         : $CLSID_OptiGenLibraryForCOM_MOGene
INTERFACE IMOGene $IID_OptiGenLibraryForCOM_IMOGene
    INHERIT IDISPATCH

    PROPERTY GET value <1> () AS DOUBLE
    PROPERTY SET value <1> (BYVAL pVal AS DOUBLE)
END INTERFACE

' Interface Name  : IObjective
' Description     : IObjective Interface
' Class Name      : Objective
' ClassID         : $CLSID_OptiGenLibraryForCOM_Objective
INTERFACE IObjective $IID_OptiGenLibraryForCOM_IObjective
    INHERIT IDISPATCH

    PROPERTY GET value <1> () AS DOUBLE
    PROPERTY SET value <1> (BYVAL pVal AS DOUBLE)
END INTERFACE

' Interface Name  : IConstrain
' Description     : IConstrain Interface
' Class Name      : Constrain
' ClassID         : $CLSID_OptiGenLibraryForCOM_Constrain
INTERFACE IConstrain $IID_OptiGenLibraryForCOM_IConstrain
    INHERIT IDISPATCH

    PROPERTY GET value <1> () AS DOUBLE
    PROPERTY SET value <1> (BYVAL pVal AS DOUBLE)
END INTERFACE

' Interface Name  : Int__IAttributeSelectionEvents
' Description     : _IAttributeSelectionEvents Interface
' ClassID         : $CLSID_OptiGenLibraryForCOM_Event__IAttributeSelectionEvents
' ProgID          : $PROGID_OptiGenLibraryForCOM_AttributeSelection
' Version ProgID  : $PROGID_OptiGenLibraryForCOM_AttributeSelection1
CLASS Class_Int__IAttributeSelectionEvents $CLSID_OptiGenLibraryForCOM_Event__IAttributeSelectionEvents AS EVENT
    INTERFACE Int__IAttributeSelectionEvents $IID_OptiGenLibraryForCOM_Int__IAttributeSelectionEvents
        INHERIT IDISPATCH

        METHOD objectiveFunction <1> (BYREF fitness AS DOUBLE, BYREF pause AS INTEGER, BYREF IN chromosome AS IMOChromosome)
            ' Insert your code here
        END METHOD

        METHOD generationEnded <2> ()
            ' Insert your code here
        END METHOD

    END INTERFACE
END CLASS

' Interface Name  : INonDominatedSortingGA
' Description     : INonDominatedSortingGA Interface
' Class Name      : NonDominatedSortingGA
' ClassID         : $CLSID_OptiGenLibraryForCOM_NonDominatedSortingGA
' ProgID          : $PROGID_OptiGenLibraryForCOM_NonDominatedSortingGA
' Version ProgID  : $PROGID_OptiGenLibraryForCOM_NonDominatedSortingGA1
INTERFACE INonDominatedSortingGA $IID_OptiGenLibraryForCOM_INonDominatedSortingGA
    INHERIT IDISPATCH

    METHOD evolve <1> ()
    PROPERTY GET population <2> () AS IMOPopulation
    PROPERTY GET maxNumberOfGeneration <3> () AS LONG
    PROPERTY SET maxNumberOfGeneration <3> (BYVAL pVal AS LONG)
    PROPERTY GET populationSize <4> () AS LONG
    PROPERTY SET populationSize <4> (BYVAL pVal AS LONG)
    PROPERTY GET checkForMatchingChromosome <5> () AS INTEGER
    PROPERTY SET checkForMatchingChromosome <5> (BYVAL pVal AS INTEGER)
    METHOD RESET <6> (BYVAL useInitialValues AS INTEGER)
    PROPERTY GET numberOfGeneDefinitions <7> () AS LONG
    PROPERTY GET crossoverProbability <8> () AS DOUBLE
    PROPERTY SET crossoverProbability <8> (BYVAL pVal AS DOUBLE)
    PROPERTY GET mutationProbability <9> () AS DOUBLE
    PROPERTY SET mutationProbability <9> (BYVAL pVal AS DOUBLE)
    PROPERTY GET terminationType <10> () AS LONG
    PROPERTY SET terminationType <10> (BYVAL pVal AS LONG)
    PROPERTY GET maximumEvolutionTime <11> () AS LONG
    PROPERTY SET maximumEvolutionTime <11> (BYVAL pVal AS LONG)
    PROPERTY GET allowTerminationDuringEvaluation <12> () AS INTEGER
    PROPERTY SET allowTerminationDuringEvaluation <12> (BYVAL pVal AS INTEGER)
    PROPERTY GET computeStatisticsEvery <13> () AS LONG
    PROPERTY SET computeStatisticsEvery <13> (BYVAL pVal AS LONG)
    PROPERTY GET numberOfStatistics <14> () AS LONG
    PROPERTY GET statistics <15> (BYVAL index AS LONG) AS IMOStatistics
    PROPERTY GET elapsedTime <16> () AS LONG
    METHOD seedRandom <17> (BYVAL seed AS LONG)
    PROPERTY GET initializationType <18> () AS LONG
    PROPERTY SET initializationType <18> (BYVAL pVal AS LONG)
    PROPERTY GET terminated <19> () AS INTEGER
    METHOD writeStatisticsToFile <20> (BYVAL filePathName AS WSTRING, OPT BYVAL useExponentialNotation AS INTEGER)
    METHOD addBinaryGeneDefinition <21> (OPT BYVAL initialValue AS DOUBLE, OPT BYVAL mutationType AS LONG)
    METHOD addIntegerGeneDefinition <22> (BYVAL lowerBound AS DOUBLE, BYVAL upperBound AS DOUBLE, OPT BYVAL initialValue AS _
        DOUBLE, OPT BYVAL mutationType AS LONG)
    METHOD addDoubleGeneDefinition <23> (BYVAL lowerBound AS DOUBLE, BYVAL upperBound AS DOUBLE, OPT BYVAL initialValue AS _
        DOUBLE, OPT BYVAL mutationType AS LONG)
    PROPERTY GET HVConvergenceThreshold <24> () AS DOUBLE
    PROPERTY SET HVConvergenceThreshold <24> (BYVAL pVal AS DOUBLE)
    PROPERTY GET numberOfObjectives <25> () AS LONG
    METHOD addObjectiveDefinition <26> (OPT BYVAL objectiveType AS LONG)
    PROPERTY GET numberOfConstraints <27> () AS LONG
    METHOD addConstraintDefinition <28> (OPT BYVAL constraintType AS LONG, OPT BYVAL constraintBoundary AS DOUBLE)
    PROPERTY GET numberOfGenerations <29> () AS LONG
    PROPERTY GET maxIterationsWithoutImprovement <30> () AS LONG
    PROPERTY SET maxIterationsWithoutImprovement <30> (BYVAL pVal AS LONG)
    METHOD constrainDominationSort <31> ()
END INTERFACE

' Interface Name  : IMOPopulation
' Description     : IMOPopulation Interface
' Class Name      : MOPopulation
' ClassID         : $CLSID_OptiGenLibraryForCOM_MOPopulation
INTERFACE IMOPopulation $IID_OptiGenLibraryForCOM_IMOPopulation
    INHERIT IDISPATCH

    PROPERTY GET numberOfChromosomes <1> () AS LONG
    PROPERTY GET chromosomes <2> (BYVAL index AS LONG) AS IMOChromosome
    METHOD initialize <3> ()
    METHOD evaluate <4> (OPT BYVAL chromosomeIndex AS LONG)
    METHOD writePopulationToFile <5> (BYVAL filePathName AS WSTRING, OPT BYVAL sortPopulation AS INTEGER, OPT BYVAL _
        useExponentialNotation AS INTEGER)
    METHOD SORT <6> ()
END INTERFACE

' Interface Name  : IMOStatistics
' Description     : IMOStatistics Interface
' Class Name      : MOStatistics
' ClassID         : $CLSID_OptiGenLibraryForCOM_MOStatistics
INTERFACE IMOStatistics $IID_OptiGenLibraryForCOM_IMOStatistics
    INHERIT IDISPATCH

    PROPERTY GET generationNumber <1> () AS LONG
    PROPERTY GET averageViolation <2> () AS DOUBLE
    PROPERTY GET hyperVolume <3> () AS DOUBLE
    PROPERTY GET numberOfBestSolutions <4> () AS LONG
    PROPERTY GET numberOfDistinctBestSolutions <5> () AS LONG
END INTERFACE

' Interface Name  : Int__INonDominatedSortingGAEvents
' Description     : _INonDominatedSortingGAEvents Interface
' ClassID         : $CLSID_OptiGenLibraryForCOM_Event__INonDominatedSortingGAEvents
' ProgID          : $PROGID_OptiGenLibraryForCOM_NonDominatedSortingGA
' Version ProgID  : $PROGID_OptiGenLibraryForCOM_NonDominatedSortingGA1
CLASS Class_Int__INonDominatedSortingGAEvents $CLSID_OptiGenLibraryForCOM_Event__INonDominatedSortingGAEvents AS EVENT
    INTERFACE Int__INonDominatedSortingGAEvents $IID_OptiGenLibraryForCOM_Int__INonDominatedSortingGAEvents
        INHERIT IDISPATCH

        METHOD objectiveFunction <1> (BYREF fitness AS DOUBLE, BYREF pause AS INTEGER, BYREF INOUT chromosome AS IMOChromosome)
            ' Insert your code here
        END METHOD

        METHOD generationEnded <2> ()
            ' Insert your code here
        END METHOD

    END INTERFACE
END CLASS

' Interface Name  : IRandomNumber
' Description     : IRandomNumber Interface
' Class Name      : RandomNumber
' ClassID         : $CLSID_OptiGenLibraryForCOM_RandomNumber
' ProgID          : $PROGID_OptiGenLibraryForCOM_RandomNumber
' Version ProgID  : $PROGID_OptiGenLibraryForCOM_RandomNumber1
INTERFACE IRandomNumber $IID_OptiGenLibraryForCOM_IRandomNumber
    INHERIT IDISPATCH

    METHOD seedRandom <1> (BYVAL seed AS LONG)
    METHOD randomBinary <2> () AS DOUBLE
    METHOD randomInteger <3> (BYVAL lowerBound AS DOUBLE, BYVAL upperBound AS DOUBLE) AS DOUBLE
    METHOD randomDouble <4> (BYVAL lowerBound AS DOUBLE, BYVAL upperBound AS DOUBLE) AS DOUBLE
    METHOD flipBiasedCoin <5> (BYVAL probability AS DOUBLE) AS INTEGER
    METHOD randomGaussian <6> (BYVAL mean AS DOUBLE, BYVAL stdDev AS DOUBLE) AS DOUBLE
END INTERFACE

' Interface Name  : ISAStatistics
' Description     : ISAStatistics Interface
' Class Name      : SAStatistics
' ClassID         : $CLSID_OptiGenLibraryForCOM_SAStatistics
' ProgID          : $PROGID_OptiGenLibraryForCOM_SAStatistics
' Version ProgID  : $PROGID_OptiGenLibraryForCOM_SAStatistics1
INTERFACE ISAStatistics $IID_OptiGenLibraryForCOM_ISAStatistics
    INHERIT IDISPATCH

    PROPERTY GET generationNumber <1> () AS LONG
    PROPERTY GET temperature <2> () AS DOUBLE
    PROPERTY GET uphillAcceptance <3> () AS LONG
    PROPERTY GET totalAcceptance <4> () AS LONG
    PROPERTY GET optimalValue <5> () AS DOUBLE
END INTERFACE

' Interface Name  : Int__ISimulatedAnnealingEvents
' Description     : _ISimulatedAnnealingEvents Interface
' ClassID         : $CLSID_OptiGenLibraryForCOM_Event__ISimulatedAnnealingEvents
' ProgID          : $PROGID_OptiGenLibraryForCOM_SimulatedAnnealing
' Version ProgID  : $PROGID_OptiGenLibraryForCOM_SimulatedAnnealing1
CLASS Class_Int__ISimulatedAnnealingEvents $CLSID_OptiGenLibraryForCOM_Event__ISimulatedAnnealingEvents AS EVENT
    INTERFACE Int__ISimulatedAnnealingEvents $IID_OptiGenLibraryForCOM_Int__ISimulatedAnnealingEvents
        INHERIT IDISPATCH

        METHOD objectiveFunction <1> (BYREF fitness AS DOUBLE, BYREF pause AS INTEGER, BYREF IN chromosome AS IMOChromosome)
            ' Insert your code here
        END METHOD

        METHOD generationEnded <2> ()
            ' Insert your code here
        END METHOD

    END INTERFACE
END CLASS

' Interface Name  : ISimulatedAnnealing
' Description     : ISimulatedAnnealing Interface
' Class Name      : SimulatedAnnealing
' ClassID         : $CLSID_OptiGenLibraryForCOM_SimulatedAnnealing
' ProgID          : $PROGID_OptiGenLibraryForCOM_SimulatedAnnealing
' Version ProgID  : $PROGID_OptiGenLibraryForCOM_SimulatedAnnealing1
INTERFACE ISimulatedAnnealing $IID_OptiGenLibraryForCOM_ISimulatedAnnealing
    INHERIT IDISPATCH

    PROPERTY GET initialTemperature <1> () AS DOUBLE
    PROPERTY SET initialTemperature <1> (BYVAL pVal AS DOUBLE)
    PROPERTY GET coolingCoefficient <2> () AS DOUBLE
    PROPERTY SET coolingCoefficient <2> (BYVAL pVal AS DOUBLE)
    PROPERTY GET numberOfMovesPerTemperature <3> () AS LONG
    PROPERTY SET numberOfMovesPerTemperature <3> (BYVAL pVal AS LONG)
    PROPERTY GET maxIterationsWithoutImprovement <4> () AS LONG
    PROPERTY SET maxIterationsWithoutImprovement <4> (BYVAL pVal AS LONG)
    PROPERTY GET minimumTemperature <5> () AS DOUBLE
    PROPERTY SET minimumTemperature <5> (BYVAL pVal AS DOUBLE)
    PROPERTY GET statistics <6> (BYVAL index AS LONG) AS ISAStatistics
    METHOD evolve <7> ()
    PROPERTY GET objectiveType <8> () AS LONG
    PROPERTY SET objectiveType <8> (BYVAL pVal AS LONG)
    PROPERTY GET maxNumberOfIterations <9> () AS LONG
    PROPERTY SET maxNumberOfIterations <9> (BYVAL pVal AS LONG)
    PROPERTY GET bestSolution <10> (OPT BYVAL evaluateIfNecessary AS INTEGER) AS IMOChromosome
    METHOD RESET <11> (BYVAL useInitialValues AS INTEGER)
    PROPERTY GET maximumEvolutionTime <12> () AS LONG
    PROPERTY SET maximumEvolutionTime <12> (BYVAL pVal AS LONG)
    PROPERTY GET computeStatisticsEvery <13> () AS LONG
    PROPERTY SET computeStatisticsEvery <13> (BYVAL pVal AS LONG)
    PROPERTY GET numberOfStatistics <14> () AS LONG
    PROPERTY GET numberOfGenerations <15> () AS LONG
    PROPERTY GET elapsedTime <16> () AS LONG
    PROPERTY GET terminated <17> () AS INTEGER
    METHOD writeStatisticsToFile <18> (BYVAL filePathName AS WSTRING, OPT BYVAL useExponentialNotation AS INTEGER)
    METHOD addBinaryGeneDefinition <19> (OPT BYVAL initialValue AS DOUBLE, OPT BYVAL mutationType AS LONG)
    METHOD addIntegerGeneDefinition <20> (BYVAL lowerBound AS DOUBLE, BYVAL upperBound AS DOUBLE, OPT BYVAL initialValue AS _
        DOUBLE, OPT BYVAL mutationType AS LONG)
    METHOD addDoubleGeneDefinition <21> (BYVAL lowerBound AS DOUBLE, BYVAL upperBound AS DOUBLE, OPT BYVAL initialValue AS _
        DOUBLE, OPT BYVAL mutationType AS LONG)
    PROPERTY GET terminationType <22> () AS LONG
    PROPERTY SET terminationType <22> (BYVAL pVal AS LONG)
    METHOD seedRandom <23> (BYVAL seed AS LONG)
    PROPERTY GET numberOfIterations <24> () AS LONG
    PROPERTY GET currentTemperature <25> () AS DOUBLE
END INTERFACE

José Roca

You're using declations for direct interface calls. Therefore OBJECT can't be used with them


    ' Specify whether to minimize or maximize the objective function
'    OBJECT SET oGA.objectiveType = enumObjectiveType.otMaximize
    oGA.objectiveType = enumObjectiveType.otMaximize

    ' Set genetic algorithm parameters to user-specified values
'    OBJECT LET oGA.maxNumberOfGenerations = 250
'    OBJECT LET oGA.populationSize = 25
'    OBJECT LET oGA.mutationProbability = 0.005
'    OBJECT LET oGA.crossoverProbability = 0.95

    oGA.maxNumberOfGenerations = 250
    oGA.populationSize = 25
    oGA.mutationProbability = 0.005
    oGA.crossoverProbability = 0.95

    ' Run the genetic algorithm
'    OBJECT CALL oGA.evolve
    oGA.evolve


José Roca

Quote
I also believe there will be issues with the sub at the end, which appears to have an interface as a variable...

Change chromosome AS OptiGenLibraryForCOM.IChromosome to
chromosome AS IChromosome

Andrew Lindsay

Thanks for the input so far...

I have managed to get it to compile, however, it will not actually solve anything.  I think the problem is that the objective function (called ga_objectiveFunction) is not being called.

I have tried the routine above, where it is a sub in the main program (trying to copy directly from the VB6 example). However, this did not work.

I also looked at the interface includes (both the PB-COM and TypeLib Browser 5.0.1).  I add the the same code from the function to the event code, as shown here..
' ########################################################################################
' Class CIGenerationalGAEvents
' Interface name = _IGenerationalGAEvents
' IID = {F8619E8F-9621-11D2-8DC2-0060978D6BC9}
' _IGenerationalGAEvents Interface
' Attributes = 4096 [&H1000] [Dispatchable]
' Code generated by the TypeLib Browser 5.0.1 (c) 2011 by José Roca
' Date: 03 Sep 2011   Time: 07:54:33
' ########################################################################################

CLASS CIGenerationalGAEvents GUID$("{30FBD1A5-6E46-4FA3-91D4-C6C88BB3B1E5}") AS EVENT

INTERFACE IGenerationalGAEventsImpl GUID$("{F8619E8F-9621-11D2-8DC2-0060978D6BC9}") AS EVENT

  INHERIT IDISPATCH

   ' =====================================================================================
   METHOD objectiveFunction <1> ( _
     BYREF prm_fitness AS DOUBLE _                      ' [out] *fitness VT_R8 <Double>
   , BYREF prm_pause AS INTEGER _                       ' [out] *pause VT_BOOL <Integer>
   , BYREF prm_chromosome AS IChromosome _              ' [in] **chromosome IChromosome <dispinterface>
   )                                                    ' void

     ' *** Insert your code here ***
     ' Objective function (Maximize/Minimize genes)

     prm_fitness = 0
     DIM i AS INTEGER
     FOR i = 0 TO prm_chromosome.numberOfGenes - 1
        prm_fitness = prm_fitness + prm_chromosome.genes(i).Value
     NEXT i

   END METHOD
   ' =====================================================================================

   ' =====================================================================================
   METHOD generationEnded <2>

     ' *** Insert your code here ***

   END METHOD
   ' =====================================================================================

   ' =====================================================================================
   METHOD greedyCrossoverObjFn <3> ( _
     BYREF prm_fitness AS DOUBLE _                      ' [out] *fitness VT_R8 <Double>
   , BYVAL prm_gene1Value AS LONG _                     ' [in] gene1Value VT_INT <Long>
   , BYVAL prm_gene2Value AS LONG _                     ' [in] gene2Value VT_INT <Long>
   )                                                    ' void

     ' *** Insert your code here ***

   END METHOD
   ' =====================================================================================

END INTERFACE

END CLASS


The code (which compiles but does nto run correctly is attached).

Any further assistance in sorting this out would be greatly appreciated.

Regards

Andrew

José Roca

Quote
I think the problem is that the objective function (called ga_objectiveFunction) is not being called.

Of course not. You should read the PowerBASIC documentation instead of Visual Basic examples.

To connect to the events fired by the server use:


DIM pGAEvents AS IGenerationalGAEventsImpl
pGAEvents = CLASS "CIGenerationalGAEvents"
EVENTS FROM oGA CALL pGAEvents


Later, to disconnect events, use:


EVENTS END pGAEvents


Andrew Lindsay

Champion!!!

Now it is all up and running as it should.  Thanks for the support.

Regards

Andrew Lindsay