コード例 #1
0
def main():
    parser = dim.Parser(
        description=
        'The python version of the Dynamic Islands Model for OneMax problem.',
        verbose='error')
    parser.add_argument('--nislands',
                        '-N',
                        help='number of islands',
                        type=int,
                        default=4)
    parser.add_argument('--popSize',
                        '-P',
                        help='size of population',
                        type=int,
                        default=100)
    parser.add_argument('--chromSize',
                        '-n',
                        help='size of problem',
                        type=int,
                        default=1000)
    parser.add_argument('--definedChromSize',
                        help='size of problem set to True',
                        type=int,
                        default=0)
    parser.add_argument('--targetFitness',
                        '-T',
                        help='optimum to reach (0: disable)',
                        type=int)
    parser.add_argument('--maxGen',
                        '-G',
                        help='maximum number of generation (0: disable)',
                        type=int,
                        default=0)
    parser.add_argument('--alpha',
                        '-a',
                        help='the alpha parameter of the learning process',
                        type=float,
                        default=.2)
    parser.add_argument('--alphaF',
                        '-A',
                        help='the alpha parameter of the learning process',
                        type=float,
                        default=.01)
    parser.add_argument('--beta',
                        '-b',
                        help='the beta parameter of the learning process',
                        type=float,
                        default=.01)
    parser.add_argument('--strategy',
                        '-S',
                        help='set a strategy of rewarding',
                        default=dim.Best)
    parser.add_argument('--best',
                        '-B',
                        action='store_const',
                        const=dim.Best,
                        dest='strategy',
                        help='best strategy (see -S)')
    parser.add_argument('--avg',
                        '-M',
                        action='store_const',
                        const=dim.Average,
                        dest='strategy',
                        help='average strategy (see -S)')
    parser.add_argument('--stepTimer',
                        help='step of time used for printing results to files',
                        type=int,
                        default=0)
    parser.add_argument(
        '--seed',
        help='set the seed value for the generator of pseudo-random numbers',
        type=int,
        default=0)
    args = parser()

    if args.seed:
        dim.random.seed(args.seed)
        print("seed:", args.seed)

    N = args.nislands
    P = args.popSize
    n = args.chromSize
    T = args.targetFitness
    G = args.maxGen

    # init = dim.Zerofy(n)
    init = dim.Defined(n, args.definedChromSize)
    init_matrix = dim.InitMatrix(N, 1 / N * 100)
    __eval = OneMaxFullEval()
    reward = args.strategy(args.alpha, args.beta)
    updater = dim.Updater(reward)
    memorizer = dim.Memorize()

    matrix = init_matrix()
    print(matrix)

    pop_set = []
    data_set = []

    for i in range(N):
        pop_set += [dim.Population(P, init)]
        data_set += [dim.IslandData(i, N)]

    evolvers = []
    feedbackers = []
    updaters = [updater] * N
    memorizers = [memorizer] * N
    migrators = []
    checkpoints = []

    for i in range(N):
        pop = pop_set[i]
        data = data_set[i]

        data.proba = matrix[i].copy()
        dim.apply(pop, __eval)

        mon = None
        if data.rank == 0:
            mon = BitMutation(1, True)
        else:
            mon = DetBitFlip((data.rank - 1) * 2 + 1)

        print(i, mon)

        evolver = dim.Evolver(__eval, mon)
        evolvers += [evolver]
        feedbacker = dim.Feedbacker(pop_set, data_set, args.alphaF)
        feedbackers += [feedbacker]
        migrator = dim.Migrator(pop_set, data_set)
        migrators += [migrator]

        fit = dim.Fit(T if T else n)
        cont = dim.Combined(fit)
        checkpoint = dim.Checkpoint(cont)
        checkpoints += [checkpoint]

        if G:
            maxgen = dim.MaxGen(G)
            cont.add(maxgen)

        monitor = dim.Print(out=open('result_monitor_%d' % data.rank, 'w'),
                            stepTimer=args.stepTimer)
        monitor.addTo(checkpoint)

        for stat in [
                dim.IslandRank(),
                dim.ElapsedTime(),
                dim.ElapsedTimeBetweenGenerations(),
                dim.Generation(),
                dim.PopSize(),
                dim.AverageFitness(),
                dim.BestFitness(),
                dim.BestOfBestFitness(pop_set, data_set),
                dim.Probabilities(),
                dim.CommingProbabilities(pop_set, data_set),
                # dim.SumOfGoingProbabilities(),
                # dim.SumOfCommingProbabilities(pop_set, data_set),
                dim.Feedbacks(),
        ]:
            stat.addTo(checkpoint)
            monitor.add(stat)

    for step in [evolvers, feedbackers, updaters, memorizers, migrators]:
        for i in range(N):
            step[i].firstCall(pop_set[i], data_set[i])

    while True:
        stop = False
        for i in range(N):
            if not checkpoints[i](pop_set[i], data_set[i]):
                stop = True
                break
        if stop: break

        for i in range(N):
            evolvers[i](pop_set[i], data_set[i])

        for i in range(N):
            feedbackers[i].send(pop_set[i], data_set[i])
        for i in range(N):
            feedbackers[i].recv(pop_set[i], data_set[i])

        for i in range(N):
            updaters[i](pop_set[i], data_set[i])
        for i in range(N):
            memorizers[i](pop_set[i], data_set[i])

        for i in range(N):
            migrators[i].send(pop_set[i], data_set[i])
        for i in range(N):
            migrators[i].recv(pop_set[i], data_set[i])

    for step in [evolvers, feedbackers, updaters, memorizers, migrators]:
        for i in range(N):
            step[i].lastCall(pop_set[i], data_set[i])
コード例 #2
0
ファイル: onemax_seq.py プロジェクト: canercandan/dim
def main():
    parser = dim.Parser(description='The python version of the Dynamic Islands Model for OneMax problem.', verbose='error')
    parser.add_argument('--nislands', '-N', help='number of islands', type=int, default=4)
    parser.add_argument('--popSize', '-P', help='size of population', type=int, default=100)
    parser.add_argument('--chromSize', '-n', help='size of problem', type=int, default=1000)
    parser.add_argument('--definedChromSize', help='size of problem set to True', type=int, default=0)
    parser.add_argument('--targetFitness', '-T', help='optimum to reach (0: disable)', type=int)
    parser.add_argument('--maxGen', '-G', help='maximum number of generation (0: disable)', type=int, default=0)
    parser.add_argument('--alpha', '-a', help='the alpha parameter of the learning process', type=float, default=.2)
    parser.add_argument('--alphaF', '-A', help='the alpha parameter of the learning process', type=float, default=.01)
    parser.add_argument('--beta', '-b', help='the beta parameter of the learning process', type=float, default=.01)
    parser.add_argument('--strategy', '-S', help='set a strategy of rewarding', default=dim.Best)
    parser.add_argument('--best', '-B', action='store_const', const=dim.Best, dest='strategy', help='best strategy (see -S)')
    parser.add_argument('--avg', '-M', action='store_const', const=dim.Average, dest='strategy', help='average strategy (see -S)')
    parser.add_argument('--stepTimer', help='step of time used for printing results to files', type=int, default=0)
    parser.add_argument('--seed', help='set the seed value for the generator of pseudo-random numbers', type=int, default=0)
    args = parser()

    if args.seed:
        dim.random.seed(args.seed)
        print("seed:", args.seed)

    N = args.nislands
    P = args.popSize
    n = args.chromSize
    T = args.targetFitness
    G = args.maxGen

    # init = dim.Zerofy(n)
    init = dim.Defined(n,args.definedChromSize)
    init_matrix = dim.InitMatrix(N,1/N*100)
    __eval = OneMaxFullEval()
    reward = args.strategy(args.alpha, args.beta)
    updater = dim.Updater(reward)
    memorizer = dim.Memorize()

    matrix = init_matrix()
    print(matrix)

    pop_set = []
    data_set = []

    for i in range(N):
        pop_set += [dim.Population(P,init)]
        data_set += [dim.IslandData(i,N)]

    evolvers = []
    feedbackers = []
    updaters = [updater]*N
    memorizers = [memorizer]*N
    migrators = []
    checkpoints = []

    for i in range(N):
        pop = pop_set[i]
        data = data_set[i]

        data.proba = matrix[i].copy()
        dim.apply(pop, __eval)

        mon = None
        if data.rank == 0:
            mon = BitMutation(1, True)
        else:
            mon = DetBitFlip( (data.rank-1)*2+1 )

        print(i, mon)

        evolver = dim.Evolver(__eval, mon); evolvers += [evolver]
        feedbacker = dim.Feedbacker(pop_set, data_set, args.alphaF); feedbackers += [feedbacker]
        migrator = dim.Migrator(pop_set, data_set); migrators += [migrator]

        fit = dim.Fit(T if T else n)
        cont = dim.Combined(fit)
        checkpoint = dim.Checkpoint(cont); checkpoints += [checkpoint]

        if G:
            maxgen = dim.MaxGen(G)
            cont.add(maxgen)

        monitor = dim.Print( out=open('result_monitor_%d' % data.rank, 'w'), stepTimer=args.stepTimer )
        monitor.addTo(checkpoint)

        for stat in [dim.IslandRank(),
                     dim.ElapsedTime(),
                     dim.ElapsedTimeBetweenGenerations(),
                     dim.Generation(),
                     dim.PopSize(),
                     dim.AverageFitness(),
                     dim.BestFitness(),
                     dim.BestOfBestFitness(pop_set, data_set),
                     dim.Probabilities(),
                     dim.CommingProbabilities(pop_set, data_set),
                     # dim.SumOfGoingProbabilities(),
                     # dim.SumOfCommingProbabilities(pop_set, data_set),
                     dim.Feedbacks(),
        ]:
            stat.addTo(checkpoint)
            monitor.add(stat)

    for step in [evolvers, feedbackers, updaters, memorizers, migrators]:
        for i in range(N):
            step[i].firstCall(pop_set[i], data_set[i])

    while True:
        stop = False
        for i in range(N):
            if not checkpoints[i](pop_set[i], data_set[i]):
                stop = True
                break
        if stop: break

        for i in range(N): evolvers[i](pop_set[i], data_set[i])

        for i in range(N): feedbackers[i].send(pop_set[i], data_set[i])
        for i in range(N): feedbackers[i].recv(pop_set[i], data_set[i])

        for i in range(N): updaters[i](pop_set[i], data_set[i])
        for i in range(N): memorizers[i](pop_set[i], data_set[i])

        for i in range(N): migrators[i].send(pop_set[i], data_set[i])
        for i in range(N): migrators[i].recv(pop_set[i], data_set[i])

    for step in [evolvers, feedbackers, updaters, memorizers, migrators]:
        for i in range(N):
            step[i].lastCall(pop_set[i], data_set[i])
コード例 #3
0
ファイル: onemax.py プロジェクト: canercandan/dim
def main():
    parser = dim.Parser(description='The python version of the Dynamic Islands Model for OneMax problem.', verbose='error')
    parser.add_argument('--nislands', '-N', help='number of islands', type=int, default=4)
    parser.add_argument('--popSize', '-P', help='size of population', type=int, default=100)
    parser.add_argument('--chromSize', '-n', help='size of problem', type=int, default=1000)
    parser.add_argument('--definedChromSize', help='size of problem set to True', type=int, default=0)
    parser.add_argument('--targetFitness', '-T', help='optimum to reach (0: disable)', type=int)
    parser.add_argument('--maxGen', '-G', help='maximum number of generation (0: disable)', type=int, default=0)
    parser.add_argument('--alpha', '-a', help='the alpha parameter of the learning process', type=float, default=.2)
    parser.add_argument('--alphaF', '-A', help='the alpha parameter of the learning process', type=float, default=.01)
    parser.add_argument('--beta', '-b', help='the beta parameter of the learning process', type=float, default=.01)
    parser.add_argument('--strategy', '-S', help='set a strategy of rewarding', default=dim.Best)
    parser.add_argument('--best', '-B', action='store_const', const=dim.Best, dest='strategy', help='best strategy (see -S)')
    parser.add_argument('--avg', '-M', action='store_const', const=dim.Average, dest='strategy', help='average strategy (see -S)')
    parser.add_argument('--stepTimer', help='step of time used for printing results to files', type=int, default=0)
    parser.add_argument('--seed', help='set the seed value for the generator of pseudo-random numbers', type=int, default=0)
    args = parser()

    if args.seed:
        dim.random.seed(args.seed)
        print("seed:", args.seed)

    N = args.nislands
    P = args.popSize
    n = args.chromSize
    T = args.targetFitness
    G = args.maxGen

    # init = dim.ZerofyInit(n)
    init = dim.DefinedInit(n,args.definedChromSize)
    init_matrix = dim.InitMatrix(False,1/N)
    __eval = OneMaxFullEval()
    reward = args.strategy(args.alpha, args.beta)
    updater = dim.Updater(reward)
    memorizer = dim.Memorize()

    matrix = dim.zeros( (N,N) )
    init_matrix(matrix)

    pop_set = []
    data_set = []

    for i in range(N):
        pop_set += [dim.Population(P,init)]
        data_set += [dim.IslandData(i,N)]

    islands = []
    for i in range(N):
        pop = pop_set[i]
        data = data_set[i]

        data.proba = matrix[i].copy()
        dim.apply(pop, __eval)

        # mon = None
        # if data.rank == 0:
        #     mon = BitMutation(1, True)
        # else:
        #     mon = DetBitFlip( (data.rank-1)*2+1 )

        # asso = [(BitMutation, 1, True),
        #         (DetBitFlip, 1),
        #         (DetBitFlip, 3),
        #         (DetBitFlip, 5),]

        asso = [(DetBitFlip, 1),
                (DetBitFlip, 3),
                (DetBitFlip, 5),
                (DetBitFlip, 7),]

        assert len(asso) == args.nislands

        mon = asso[data.rank][0](*asso[data.rank][1:])

        print(i, mon)

        evolver = dim.Evolver(__eval, mon)
        feedbacker = dim.Feedbacker(pop_set, data_set, args.alphaF)
        migrator = dim.Migrator(pop_set, data_set)

        fit = dim.Fit(T if T else n)
        cont = dim.Combined(fit)
        checkpoint = dim.Checkpoint(cont)

        if G:
            maxgen = dim.MaxGen(G)
            cont.add(maxgen)

        monitor = dim.PrintMonitor( out=open('result_monitor_%d' % data.rank, 'w'), stepTimer=args.stepTimer )
        monitor.addTo(checkpoint)

        for stat in [dim.IslandRank(),
                     dim.ElapsedTime(),
                     dim.ElapsedTimeBetweenGenerations(),
                     dim.Generation(),
                     dim.PopSize(),
                     dim.AverageFitness(),
                     dim.BestFitness(),
                     dim.Probabilities(),
                     dim.CommingProbabilities(pop_set, data_set),
                     # dim.SumOfGoingProbabilities(),
                     # dim.SumOfCommingProbabilities(pop_set, data_set),
                     # dim.Feedbacks(),
        ]:
            stat.addTo(checkpoint)
            monitor.add(stat)

        island = dim.Algo(evolver, feedbacker, updater, memorizer,
                          migrator, checkpoint, pop_set, data_set)
        t = dim.Thread(target=island, args=[pop,data])
        islands += [t]

    for island in islands:
        island.start()

    try:
        for island in islands:
            island.join()
    except KeyboardInterrupt as e:
        print("Interrupted by user")
コード例 #4
0
ファイル: onemax.py プロジェクト: canercandan/dim
def main():
    parser = dim.Parser(
        description=
        'The python version of the Dynamic Islands Model for OneMax problem.',
        verbose='error')
    parser.add_argument('--nislands',
                        '-N',
                        help='number of islands',
                        type=int,
                        default=4)
    parser.add_argument('--popSize',
                        '-P',
                        help='size of population',
                        type=int,
                        default=100)
    parser.add_argument('--chromSize',
                        '-n',
                        help='size of problem',
                        type=int,
                        default=1000)
    parser.add_argument('--definedChromSize',
                        help='size of problem set to True',
                        type=int,
                        default=0)
    parser.add_argument('--targetFitness',
                        '-T',
                        help='optimum to reach (0: disable)',
                        type=int)
    parser.add_argument('--maxGen',
                        '-G',
                        help='maximum number of generation (0: disable)',
                        type=int,
                        default=0)
    parser.add_argument('--alpha',
                        '-a',
                        help='the alpha parameter of the learning process',
                        type=float,
                        default=.2)
    parser.add_argument('--alphaF',
                        '-A',
                        help='the alpha parameter of the learning process',
                        type=float,
                        default=.01)
    parser.add_argument('--beta',
                        '-b',
                        help='the beta parameter of the learning process',
                        type=float,
                        default=.01)
    parser.add_argument('--strategy',
                        '-S',
                        help='set a strategy of rewarding',
                        default=dim.Best)
    parser.add_argument('--best',
                        '-B',
                        action='store_const',
                        const=dim.Best,
                        dest='strategy',
                        help='best strategy (see -S)')
    parser.add_argument('--avg',
                        '-M',
                        action='store_const',
                        const=dim.Average,
                        dest='strategy',
                        help='average strategy (see -S)')
    parser.add_argument('--stepTimer',
                        help='step of time used for printing results to files',
                        type=int,
                        default=0)
    parser.add_argument(
        '--seed',
        help='set the seed value for the generator of pseudo-random numbers',
        type=int,
        default=0)
    args = parser()

    if args.seed:
        dim.random.seed(args.seed)
        print("seed:", args.seed)

    N = args.nislands
    P = args.popSize
    n = args.chromSize
    T = args.targetFitness
    G = args.maxGen

    # init = dim.ZerofyInit(n)
    init = dim.DefinedInit(n, args.definedChromSize)
    init_matrix = dim.InitMatrix(False, 1 / N)
    __eval = OneMaxFullEval()
    reward = args.strategy(args.alpha, args.beta)
    updater = dim.Updater(reward)
    memorizer = dim.Memorize()

    matrix = dim.zeros((N, N))
    init_matrix(matrix)

    pop_set = []
    data_set = []

    for i in range(N):
        pop_set += [dim.Population(P, init)]
        data_set += [dim.IslandData(i, N)]

    islands = []
    for i in range(N):
        pop = pop_set[i]
        data = data_set[i]

        data.proba = matrix[i].copy()
        dim.apply(pop, __eval)

        # mon = None
        # if data.rank == 0:
        #     mon = BitMutation(1, True)
        # else:
        #     mon = DetBitFlip( (data.rank-1)*2+1 )

        # asso = [(BitMutation, 1, True),
        #         (DetBitFlip, 1),
        #         (DetBitFlip, 3),
        #         (DetBitFlip, 5),]

        asso = [
            (DetBitFlip, 1),
            (DetBitFlip, 3),
            (DetBitFlip, 5),
            (DetBitFlip, 7),
        ]

        assert len(asso) == args.nislands

        mon = asso[data.rank][0](*asso[data.rank][1:])

        print(i, mon)

        evolver = dim.Evolver(__eval, mon)
        feedbacker = dim.Feedbacker(pop_set, data_set, args.alphaF)
        migrator = dim.Migrator(pop_set, data_set)

        fit = dim.Fit(T if T else n)
        cont = dim.Combined(fit)
        checkpoint = dim.Checkpoint(cont)

        if G:
            maxgen = dim.MaxGen(G)
            cont.add(maxgen)

        monitor = dim.PrintMonitor(out=open('result_monitor_%d' % data.rank,
                                            'w'),
                                   stepTimer=args.stepTimer)
        monitor.addTo(checkpoint)

        for stat in [
                dim.IslandRank(),
                dim.ElapsedTime(),
                dim.ElapsedTimeBetweenGenerations(),
                dim.Generation(),
                dim.PopSize(),
                dim.AverageFitness(),
                dim.BestFitness(),
                dim.Probabilities(),
                dim.CommingProbabilities(pop_set, data_set),
                # dim.SumOfGoingProbabilities(),
                # dim.SumOfCommingProbabilities(pop_set, data_set),
                # dim.Feedbacks(),
        ]:
            stat.addTo(checkpoint)
            monitor.add(stat)

        island = dim.Algo(evolver, feedbacker, updater, memorizer, migrator,
                          checkpoint, pop_set, data_set)
        t = dim.Thread(target=island, args=[pop, data])
        islands += [t]

    for island in islands:
        island.start()

    try:
        for island in islands:
            island.join()
    except KeyboardInterrupt as e:
        print("Interrupted by user")