示例#1
0
def descent_free(params, start_point: Point, game, balance=True):
    base_rtp, rtp, sdnew, hitrate, err_base_rtp, err_rtp, err_sdnew, err_hitrate = get_parameters_from_dict(
        params)

    print('started free descent')

    # print('start point base reels: ', start_point.base.reels)

    if rtp == -1:
        return [start_point, game]

    roots = initial_free_distributions(game,
                                       start_point.base.frequency,
                                       start_point.free.frequency,
                                       params,
                                       base_reels=start_point.base.reels)
    finded_min = Point(second_frequency=roots[0].base.frequency,
                       main_frequency=roots[0].free.frequency,
                       game=game,
                       main_type='free',
                       base_reels=start_point.base.reels)
    finded_min.base.reels = start_point.base.reels

    value_list = []
    for root in roots:
        print(root.free.frequency, ' value is ', root.value,
              'base_rtp, rtp, sdnew, hitrate :', root.base_rtp, root.rtp,
              root.sdnew, root.hitrate)
        value_list = value_list + [root.value]

    index_list = list(range(len(value_list)))
    double_bubble(value_list, index_list)
    print('assuming base rtp, rtp, sd ', base_rtp, rtp, sdnew)
    print('assuming errors for base rtp, rtp,  sd ', err_base_rtp, err_rtp,
          err_sdnew)

    index_list.remove(0)
    index_list = [0] + index_list

    for index in index_list:
        print('TRYING POINT', roots[index].free.frequency, ' value is ',
              roots[index].value, 'base_rtp, rtp, sdnew, hitrate :',
              roots[index].base_rtp, roots[index].rtp, roots[index].sdnew,
              roots[index].hitrate)
        root = roots[index]

        currentScale = 0
        while currentScale < scaleLimit:
            number_of_groups = len(game.free.wildlist) + len(game.free.ewildlist) + \
                               len(game.free.scatterlist) + 1
            max_number_of_groups = len(game.base.symbol)
            while number_of_groups <= max_number_of_groups:
                temp_group = Group(game,
                                   'free',
                                   root,
                                   number_of_groups,
                                   params,
                                   rebalance=balance,
                                   sd_flag=False,
                                   base_reels=start_point.base.reels)
                print('groups ', temp_group.split.groups)

                temp_group.print_group('free')

                finded_min = temp_group.find_best_point()
                if finded_min != -1:
                    if finded_min.value < 1:
                        print('ending with ', finded_min.value)
                        print('base ', finded_min.base_rtp)
                        print('rtp ', finded_min.rtp)
                        print('sdnew ', finded_min.sdnew)
                        print('hitrate ', finded_min.hitrate)
                        root = copy.deepcopy(finded_min)
                        print(root.free.frequency)
                        finded_min.fill_point_metric(params,
                                                     base=False,
                                                     sd_flag=False)
                        finded_min.base.reels = copy.deepcopy(
                            start_point.base.reels)
                        return [finded_min, game]
                    else:
                        print('path ', finded_min.value)
                        root = copy.deepcopy(finded_min)
                else:
                    if 0.5 * max_number_of_groups < number_of_groups < max_number_of_groups:
                        number_of_groups = max_number_of_groups
                    else:
                        number_of_groups += 1
            root.scaling()
            currentScale += 1
            print('SCALING ', currentScale)

    print('Free done')

    finded_min.fill_point(game,
                          params,
                          base=False,
                          sd_flag=True,
                          base_shuffle=False,
                          free_shuffle=False)
    finded_min.base.reels = copy.deepcopy(start_point.base.reels)

    return [finded_min, game]
示例#2
0
def descent_base(params, game, balance=True, start_point=None):
    base_rtp, rtp, sdnew, hitrate, err_base_rtp, err_rtp, err_sdnew, err_hitrate = get_parameters_from_dict(
        params)

    start_game = copy.deepcopy(game)

    out = sm.get_scatter_frequency(game, hitrate, err_hitrate)
    print('Generated scatter frequency')
    if out == -1 and hitrate != -1:
        raise Exception(
            'Game rules not contain freespins, but you try to fit HitRate. Please, set it -1'
        )
    elif out == -1:
        out = sm.OutResult(game.base.scatterlist)
        out.add_symbols(game.base.symbol)

    blocked_scatters = []
    for scatter_id in game.base.scatterlist:
        if max(game.base.symbol[scatter_id].scatter) > 0:
            blocked_scatters.append(scatter_id)

    print('started base descent')
    game.base.create_simple_num_comb(game.window, game.line)
    game.free.create_simple_num_comb(game.window, game.line)
    print('created_num_comb')

    roots = []
    if start_point is None:
        roots = initial_base_distributions(game, out, params)
    else:
        roots.append(start_point)
    finded_min = Point(main_frequency=roots[0].base.frequency,
                       second_frequency=roots[0].free.frequency,
                       game=game,
                       main_type='base')
    print('INITIAL POINTS, THEIR DISTRIBUTIONS, VALUES AND PARAMETERS:')

    value_list = []
    for root in roots:
        # root.fillVal(base_rtp, rtp, sdnew, err_base_rtp, err_rtp, err_sdnew)
        print(root.base.frequency, ' value is ', root.value,
              'base_rtp, rtp, sdnew, hitrate :', root.base_rtp, root.rtp,
              root.sdnew, root.hitrate)
        value_list = value_list + [root.value]
    index_list = list(range(len(value_list)))
    double_bubble(value_list, index_list)
    print('assuming base rtp, rtp, sd ', base_rtp, rtp, sdnew)
    print('assuming errors for base rtp, rtp,  sd ', err_base_rtp, err_rtp,
          err_sdnew)

    # print(value_list)
    index_list.remove(0)
    index_list = [0] + index_list

    for index in index_list:
        print('TRYING POINT', roots[index].base.frequency, ' value is ',
              roots[index].value, 'base_rtp, rtp, sdnew, hitrate :',
              roots[index].base_rtp, roots[index].rtp, roots[index].sdnew,
              roots[index].hitrate)
        root = roots[index]

        currentScale = 0
        while currentScale < scaleLimit:
            number_of_groups = len(game.base.wildlist) + len(game.base.ewildlist) + \
                               len(game.base.scatterlist) - len(blocked_scatters) + 1
            max_number_of_groups = len(
                game.base.symbol) - len(blocked_scatters)
            while number_of_groups <= max_number_of_groups:
                temp_group = Group(game,
                                   'base',
                                   root,
                                   number_of_groups,
                                   params,
                                   rebalance=balance,
                                   sd_flag=False)
                print('groups ', temp_group.split.groups)

                temp_group.print_group()

                finded_min = temp_group.find_best_point()
                if finded_min != -1:
                    if finded_min.value < 1:
                        print('ending with ', finded_min.value)
                        print('base ', finded_min.base_rtp)
                        print('rtp ', finded_min.rtp)
                        print('sdnew ', finded_min.sdnew)
                        print('hitrate ', finded_min.hitrate)
                        root = copy.deepcopy(finded_min)
                        print(root.base.frequency)
                        game.base.reels = copy.deepcopy(finded_min.base.reels)
                        game.free.reels = copy.deepcopy(finded_min.free.reels)
                        finded_min.fill_point_metric(params)
                        return [finded_min, game]
                    else:
                        print('path ', finded_min.value)
                        root = copy.deepcopy(finded_min)
                else:
                    if 0.5 * max_number_of_groups < number_of_groups < max_number_of_groups:
                        number_of_groups = max_number_of_groups
                    else:
                        number_of_groups += 1

            root.scaling()
            currentScale += 1
            print('SCALING ', currentScale)

    print('Base done')

    if finded_min == -1:
        return [start_point, start_game]

    finded_min.fill_point(game,
                          params,
                          base=False,
                          sd_flag=True,
                          base_shuffle=False,
                          free_shuffle=False)

    return [finded_min, game]