from otree.api import * from otree.api import models, Page, WaitPage from otree.api import Currency as c, currency_range import time doc = """即決価格オークション""" class C(BaseConstants): NUM_ROUNDS = 20 min_allowable_bid = c(0) #Playerクラス max_allowable_bid = c(1000) #Playerクラス NAME_IN_URL = 'auction_2nd_buyout' instructions_template = 'instructions.html' PLAYERS_PER_GROUP = None import random seed = random.randint(0,1000) class Subsession(BaseSubsession): treatment_id = models.IntegerField() delta = models.FloatField() def creating_session(subsession: Subsession): #### 各回のグループのマッチング if subsession.session.num_participants == 28: r1 = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20],[21,22,23,24],[25,26,27,28]] r2 = [[1,10,7,8],[5,2,15,4],[9,6,3,16],[13,18,11,12],[17,14,27,24],[21,26,19,28],[25,22,23,20]] r3 = [[1,6,15,20],[5,10,23,24],[9,2,27,4],[13,26,19,8],[17,22,3,12],[21,14,11,16],[25,18,7,28]] r4 = [[1,18,11,24],[5,26,27,8],[9,22,19,20],[13,2,23,4],[17,6,15,28],[21,10,7,12],[25,14,3,16]] r5 = [[1,14,23,12],[5,18,3,16],[9,26,11,24],[13,10,27,20],[17,2,7,4],[21,22,15,28],[25,6,19,8]] r6 = [[1,2],[3,4],[5,10],[7,28],[9,14],[11,20],[13,18],[15,8],[17,26],[19,16],[21,6],[23,24],[25,22],[27,12]] r7 = [[1,10],[3,12],[5,14],[7,4],[9,2],[11,28],[13,6],[15,20],[17,18],[19,8],[21,22],[23,16],[25,26],[27,24]] r8 = [[1,14],[3,24],[5,22],[7,12],[9,6],[11,4],[13,10],[15,16],[17,2],[19,20],[21,18],[23,8],[25,26],[27,28]] r9 = [[1,22],[3,16],[5,6],[7,24],[9,18],[11,12],[13,14],[15,4],[17,10],[19,28],[21,26],[23,20],[25,2],[27,8]] r10 = [[1,2],[3,8],[5,18],[7,16],[9,22],[11,24],[13,26],[15,12],[17,14],[19,4],[21,10],[23,28],[25,6],[27,20]] r11 = [[1,22,19,16],[5,2,11,12],[9,14,7,8],[13,18,3,24],[17,26,27,28],[21,6,23,20],[25,10,15,4]] r12 = [[1,18,15,4],[5,14,7,24],[9,2,19,12],[13,6,11,28],[17,10,23,16],[21,22,3,8],[25,26,27,20]] r13 = [[1,26,3,20],[5,22,19,4],[9,10,15,24],[13,2,23,12],[17,6,27,8],[21,18,11,16],[25,14,7,28]] r14 = [[1,6,11,28],[5,10,27,8],[9,14,3,4],[13,22,19,16],[17,2,15,20],[21,26,7,24],[25,18,23,12]] r15 = [[1,26,23,12],[5,6,15,16],[9,18,11,20],[13,10,7,4],[17,22,3,24],[21,2,27,28],[25,14,19,8]] r16 = [[1,10],[3,20],[5,26],[7,8],[9,6],[11,16],[13,18],[15,24],[17,22],[19,12],[21,14],[23,4],[25,2],[27,28]] r17 = [[1,2],[3,28],[5,10],[7,20],[9,26],[11,8],[13,6],[15,16],[17,14],[19,24],[21,18],[23,12],[25,22],[27,4]] r18 = [[1,26],[3,4],[5,2],[7,28],[9,10],[11,20],[13,14],[15,8],[17,6],[19,16],[21,22],[23,24],[25,18],[27,12]] r19 = [[1,14],[3,12],[5,18],[7,4],[9,2],[11,28],[13,10],[15,20],[17,22],[19,8],[21,6],[23,16],[25,26],[27,24]] r20 = [[1,18],[3,24],[5,14],[7,12],[9,22],[11,4],[13,2],[15,28],[17,26],[19,20],[21,10],[23,8],[25,6],[27,16]] elif subsession.session.num_participants == 24: r1 = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20],[21,22,23,24]] r2 = [[1,10,7,24],[5,2,15,4],[9,18,3,8],[13,6,23,12],[17,22,11,16],[21,14,19,20]] r3 = [[1,18,23,20],[5,14,19,24],[9,2,15,4],[13,22,11,8],[17,10,3,12],[21,6,7,16]] r4 = [[1,6,11,16],[5,18,3,20],[9,22,19,24],[13,2,23,4],[17,14,7,8],[21,10,15,12]] r5 = [[1,14,19,12],[5,22,11,16],[9,6,7,20],[13,10,3,24],[17,2,15,4],[21,18,23,8]] r6 = [[1,2],[3,4],[5,6],[7,8],[9,10],[11,12],[13,14],[15,16],[17,18],[19,20],[21,22],[23,24]] r7 = [[1,22],[3,24],[5,2],[7,4],[9,6],[11,8],[13,10],[15,12],[17,14],[19,16],[21,18],[23,20]] r8 = [[1,18],[3,20],[5,22],[7,24],[9,2],[11,4],[13,6],[15,8],[17,10],[19,12],[21,14],[23,16]] r9 = [[1,14],[3,16],[5,18],[7,20],[9,22],[11,24],[13,2],[15,4],[17,6],[19,8],[21,10],[23,12]] r10 = [[1,10],[3,12],[5,14],[7,16],[9,18],[11,20],[13,22],[15,24],[17,2],[19,4],[21,6],[23,8]] r11 = [[1,22,15,4],[5,14,7,8],[9,10,19,12],[13,18,11,16],[17,6,23,20],[21,2,3,24]] r12 = [[1,2,7,24],[5,10,3,4],[9,6,15,8],[13,22,19,12],[17,14,11,16],[21,18,23,20]] r13 = [[1,22,19,20],[5,2,23,24],[9,14,11,4],[13,6,3,8],[17,18,15,12],[21,10,7,16]] r14 = [[1,22,23,16],[5,18,11,20],[9,2,19,24],[13,10,15,4],[17,14,7,8],[21,6,3,12]] r15 = [[1,6,3,12],[5,14,15,16],[9,10,23,20],[13,2,7,24],[17,18,19,4],[21,22,11,8]] r16 = [[1,6],[3,8],[5,10],[7,12],[9,14],[11,16],[13,18],[15,20],[17,22],[19,24],[21,2],[23,4]] r17 = [[1,2],[3,4],[5,6],[7,8],[9,10],[11,12],[13,14],[15,16],[17,18],[19,20],[21,22],[23,24]] r18 = [[1,22],[3,24],[5,2],[7,4],[9,6],[11,8],[13,10],[15,12],[17,14],[19,16],[21,18],[23,20]] r19 = [[1,18],[3,20],[5,22],[7,24],[9,2],[11,4],[13,6],[15,8],[17,10],[19,12],[21,14],[23,16]] r20 = [[1,14],[3,16],[5,18],[7,20],[9,22],[11,24],[13,2],[15,4],[17,6],[19,8],[21,10],[23,12]] elif subsession.session.num_participants == 20: r1 = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]] r2 = [[1,6,15,20],[5,10,19,4],[9,14,3,8],[13,18,7,12],[17,2,11,16]] r3 = [[1,10,7,16],[5,14,11,20],[9,18,15,4],[13,2,19,8],[17,6,3,12]] r4 = [[1,14,19,12],[5,18,3,16],[9,2,7,20],[13,6,11,4],[17,10,15,8]] r5 = [[1,18,11,8],[5,2,15,12],[9,6,19,16],[13,10,3,20],[17,14,7,4]] r6 = [[1,2],[3,4],[5,6],[7,8],[9,10],[11,12],[13,14],[15,16],[17,18],[19,20]] r7 = [[1,6],[3,20],[5,10],[7,4],[9,14],[11,8],[13,18],[15,12],[17,2],[19,16]] r8 = [[1,10],[3,16],[5,14],[7,20],[9,18],[11,4],[13,2],[15,8],[17,6],[19,12]] r9 = [[1,14],[3,12],[5,18],[7,16],[9,2],[11,20],[13,6],[15,4],[17,10],[19,8]] r10 = [[1,18],[3,8],[5,2],[7,12],[9,6],[11,16],[13,10],[15,20],[17,14],[19,4]] r11 = [[1,18,7,4],[5,2,11,8],[9,6,15,12],[13,10,3,16],[17,14,19,20]] r12 = [[1,14,19,8],[5,18,3,12],[9,2,11,16],[13,6,7,20],[17,10,15,4]] r13 = [[1,10,15,12],[5,14,19,16],[9,18,7,20],[13,2,11,4],[17,6,3,8]] r14 = [[1,6,11,16],[5,10,7,20],[9,14,3,4],[13,18,19,8],[17,2,15,12]] r15 = [[1,2,3,20],[5,6,15,4],[9,10,19,8],[13,14,11,12],[17,18,7,16]] r16 = [[1,2],[3,4],[5,6],[7,8],[9,10],[11,12],[13,14],[15,16],[17,18],[19,20]] r17 = [[1,6],[3,20],[5,10],[7,4],[9,14],[11,8],[13,18],[15,12],[17,2],[19,16]] r18 = [[1,10],[3,16],[5,14],[7,20],[9,18],[11,4],[13,2],[15,8],[17,6],[19,12]] r19 = [[1,14],[3,12],[5,18],[7,16],[9,2],[11,20],[13,6],[15,4],[17,10],[19,8]] r20 = [[1,18],[3,8],[5,2],[7,12],[9,6],[11,16],[13,10],[15,20],[17,14],[19,4]] elif subsession.session.num_participants == 16: r1 = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]] r2 = [[1,14,7,12],[5,2,15,4],[9,6,11,8],[13,10,3,16]] r3 = [[1,14,11,16],[5,10,3,12],[9,2,7,4],[13,6,15,8]] r4 = [[1,6,3,8],[5,14,11,12],[9,10,15,16],[13,2,7,4]] r5 = [[1,10,7,8],[5,2,11,16],[9,14,3,4],[13,6,15,12]] r6 = [[1,2],[3,4],[5,6],[7,8],[9,10],[11,12],[13,14],[15,16]] r7 = [[1,6],[3,16],[5,2],[7,4],[9,14],[11,8],[13,10],[15,12]] r8 = [[1,14],[3,12],[5,10],[7,16],[9,2],[11,4],[13,6],[15,8]] r9 = [[1,10],[3,8],[5,14],[7,12],[9,6],[11,16],[13,2],[15,4]] r10 = [[1,6],[3,4],[5,2],[7,8],[9,14],[11,12],[13,10],[15,16]] r11 = [[1,10,15,4],[5,14,11,16],[9,2,3,12],[13,6,7,8]] r12 = [[1,6,7,16],[5,10,3,4],[9,14,11,8],[13,2,15,12]] r13 = [[1,2,15,12],[5,6,3,16],[9,10,7,4],[13,14,11,8]] r14 = [[1,2,15,8],[5,6,11,12],[9,10,3,16],[13,14,7,4]] r15 = [[1,14,15,12],[5,2,7,8],[9,6,11,16],[13,10,3,4]] r16 = [[1,2],[3,16],[5,6],[7,4],[9,10],[11,8],[13,14],[15,12]] r17 = [[1,6],[3,12],[5,10],[7,16],[9,14],[11,4],[13,2],[15,8]] r18 = [[1,10],[3,8],[5,14],[7,12],[9,2],[11,16],[13,6],[15,4]] r19 = [[1,14],[3,4],[5,2],[7,8],[9,6],[11,12],[13,10],[15,16]] r20 = [[1,6],[3,16],[5,10],[7,4],[9,2],[11,8],[13,14],[15,12]] elif subsession.session.num_participants == 12: r1 = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] r2 = [[1,10,3,12],[5,2,7,4],[9,6,11,8]] r3 = [[1,6,11,12],[5,10,3,4],[9,2,7,8]] r4 = [[1,2,11,8],[5,6,3,12],[9,10,7,4]] r5 = [[1,10,7,8],[5,2,11,12],[9,6,3,4]] r6 = [[1,2],[3,4],[5,6],[7,8],[9,10],[11,12]] r7 = [[1,10],[3,12],[5,2],[7,4],[9,6],[11,8]] r8 = [[1,6],[3,8],[5,10],[7,12],[9,2],[11,4]] r9 = [[1,3],[2,4],[5,7],[6,8],[9,11],[10,12]] r10 = [[1,10],[3,12],[5,2],[7,4],[9,6],[11,8]] r11 = [[1,2,7,12],[5,6,11,4],[9,10,3,8]] r12 = [[1,10,3,12],[5,2,7,4],[9,6,11,8]] r13 = [[1,6,7,4],[5,10,11,8],[9,2,3,12]] r14 = [[1,6,11,12],[5,10,3,8],[9,2,7,4]] r15 = [[1,2,7,12],[5,6,11,8],[9,10,3,4]] r16 = [[1,2],[3,4],[5,6],[7,8],[9,10],[11,12]] r17 = [[1,10],[3,12],[5,2],[7,4],[9,6],[11,8]] r18 = [[1,6],[3,8],[5,10],[7,12],[9,2],[11,4]] r19 = [[1,2],[3,4],[5,6],[7,8],[9,10],[11,12]] r20 = [[1,6],[3,8],[5,10],[7,12],[9,2],[11,4]] elif subsession.session.num_participants == 8: r1 = [[1,2,3,4],[5,6,7,8]] r2 = [[1,6,3,8],[5,2,7,4]] r3 = [[1,2,7,8],[5,6,3,4]] r4 = [[1,6,7,4],[5,2,3,8]] r5 = [[1,2,3,8],[5,6,7,4]] r6 = [[1,2],[3,4],[5,6],[7,8]] r7 = [[1,6],[3,8],[5,2],[7,4]] r8 = [[1,2],[3,4],[5,6],[7,8]] r9 = [[1,6],[3,8],[5,2],[7,4]] r10 = [[1,2],[3,4],[5,6],[7,8]] r11 = [[1,6,3,8],[5,2,7,4]] r12 = [[1,2,7,4],[5,6,3,8]] r13 = [[1,6,7,4],[5,2,3,8]] r14 = [[1,2,3,8],[5,6,7,4]] r15 = [[1,6,3,8],[5,2,7,4]] r16 = [[1,6],[3,8],[5,2],[7,4]] r17 = [[1,2],[3,4],[5,6],[7,8]] r18 = [[1,6],[3,8],[5,2],[7,4]] r19 = [[1,2],[3,4],[5,6],[7,8]] r20 = [[1,6],[3,8],[5,2],[7,4]] elif subsession.session.num_participants == 4: r1 = [[1,2,3,4]] r2 = [[1,2,3,4]] r3 = [[1,2,3,4]] r4 = [[1,2,3,4]] r5 = [[1,2,3,4]] r6 = [[1,2],[3,4]] r7 = [[1,2],[3,4]] r8 = [[1,2],[3,4]] r9 = [[1,2],[3,4]] r10 = [[1,2],[3,4]] r11 = [[1,2,3,4]] r12 = [[1,2,3,4]] r13 = [[1,2,3,4]] r14 = [[1,2,3,4]] r15 = [[1,2,3,4]] r16 = [[1,2],[3,4]] r17 = [[1,2],[3,4]] r18 = [[1,2],[3,4]] r19 = [[1,2],[3,4]] r20 = [[1,2],[3,4]] else: r1 = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20],[21,22,23,24],[25,26,27,28],[29,30,31,32]] r2 = [[1,22,27,20],[5,2,19,32],[9,6,3,8],[13,18,23,4],[17,10,7,16],[21,14,11,28],[25,30,15,12],[29,26,31,24]] r3 = [[1,26,11,24],[5,18,15,12],[9,2,23,32],[13,6,31,28],[17,22,3,8],[21,30,27,16],[25,10,19,4],[29,14,7,20]] r4 = [[1,10,31,32],[5,14,23,4],[9,22,7,24],[13,30,11,20],[17,2,15,12],[21,26,19,8],[25,6,3,16],[29,18,27,28]] r5 = [[1,30,3,16],[5,10,31,20],[9,14,27,28],[13,26,19,12],[17,2,23,4],[21,6,7,32],[25,18,11,24],[29,22,15,8]] r6 = [[1,30],[3,8],[5,22],[7,12],[9,18],[11,16],[13,10],[15,28],[17,14],[19,24],[21,2],[23,32],[25,6],[27,20],[29,26],[31,4]] r7 = [[1,14],[3,4],[5,18],[7,24],[9,26],[11,8],[13,22],[15,12],[17,30],[19,16],[21,10],[23,20],[25,2],[27,32],[29,6],[31,28]] r8 = [[1,6],[3,24],[5,14],[7,28],[9,30],[11,20],[13,26],[15,4],[17,22],[19,8],[21,18],[23,12],[25,10],[27,16],[29,2],[31,32]] r9 = [[1,2],[3,16],[5,6],[7,20],[9,14],[11,24],[13,30],[15,32],[17,18],[19,28],[21,26],[23,8],[25,22],[27,4],[29,10],[31,12]] r10 = [[1,10],[3,32],[5,2],[7,4],[9,6],[11,28],[13,14],[15,8],[17,26],[19,24],[21,22],[23,16],[25,30],[27,12],[29,18],[31,20]] r11 = [[1,10,11,28],[5,22,19,8],[9,2,3,12],[13,6,27,24],[17,14,7,4],[21,18,15,32],[25,30,31,20],[29,26,23,16]] r12 = [[1,26,15,24],[5,18,27,16],[9,10,23,28],[13,2,11,8],[17,6,3,20],[21,14,31,12],[25,22,7,32],[29,30,19,4]] r13 = [[1,18,7,4],[5,26,23,32],[9,30,15,20],[13,10,19,16],[17,2,11,24],[21,6,31,8],[25,14,3,28],[29,22,27,12]] r14 = [[1,14,3,20],[5,30,31,12],[9,18,19,32],[13,22,7,4],[17,26,15,28],[21,2,27,24],[25,6,23,8],[29,10,11,16]] r15 = [[1,18,31,8],[5,10,19,24],[9,30,3,16],[13,14,11,12],[17,22,27,32],[21,26,7,28],[25,2,15,4],[29,6,23,20]] r16 = [[1,22],[3,20],[5,26],[7,4],[9,30],[11,24],[13,6],[15,16],[17,10],[19,8],[21,14],[23,28],[25,18],[27,12],[29,2],[31,32]] r17 = [[1,2],[3,28],[5,10],[7,32],[9,22],[11,12],[13,18],[15,20],[17,6],[19,4],[21,26],[23,24],[25,14],[27,8],[29,30],[31,16]] r18 = [[1,18],[3,8],[5,2],[7,16],[9,26],[11,28],[13,22],[15,32],[17,30],[19,12],[21,6],[23,20],[25,10],[27,24],[29,14],[31,4]] r19 = [[1,10],[3,16],[5,18],[7,20],[9,2],[11,4],[13,30],[15,24],[17,26],[19,32],[21,14],[23,12],[25,6],[27,28],[29,22],[31,8]] r20 = [[1,26],[3,24],[5,22],[7,28],[9,18],[11,32],[13,2],[15,8],[17,14],[19,16],[21,10],[23,4],[25,30],[27,20],[29,6],[31,12]] group_matrix = [r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20] #### 各回の利得表 if subsession.session.config['treatment'] % 2 == 0: subsession.delta = 0.2 #####[ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] p1 = [110,350,610,790,980, 30, 70,430,560,640,240,280,460,220,770,500,100,320,790,820] p2 = [840,610,790,980,460,560,640, 70, 30,100,110,350,240,770,220,430,790,820,320,500] p3 = [460,280,980,110,590, 30, 70,430,560,640,240,750,770,610,350,500,100,320,790,820] p4 = [280,980,190,660,450,560,840, 70, 30,100,750,770,240,350,610,430,790,820,320,500] else: subsession.delta = 0.6 #####[ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] p1 = [ 30,100,430,790,980,490,280, 70,560,640,220,320,540,770,850,160,350,910,610,500] p2 = [280,430,790,980, 30,910,610,500,350,160,320,540,770,840,220,640,860, 70,100,490] p3 = [430,790,980, 30,100,490,280, 70,560,640,160,770,850,320,350,480,740,910,610,500] p4 = [790,980, 30,280,430,910,610,500,350,160,560,840,320,240,770,640,860, 70,100,490] #### 各回の割引率 time_discount_list = [1,1,1,1,1,1,1,1,1,1,subsession.delta,subsession.delta,subsession.delta,subsession.delta,subsession.delta,subsession.delta,subsession.delta,subsession.delta,subsession.delta,subsession.delta] ####### ラウンド順は固定 or ランダム(fix_rounds == 0でランダム) ########### #上がラウンド順を示したベクトル #ラウンド順をランダムにする時のみ、このベクトルをシャッフルする if subsession.session.config['fix_rounds'] == 1: #T3① shuffle_matrix = [15,5,11,19,20,4,10,14,8,9,3,6,12,17,7,13,16,18,2,1] elif subsession.session.config['fix_rounds'] == 2: #T3② shuffle_matrix = [12,2,9,17,11,13,5,15,7,19,1,18,8,4,16,20,3,10,14,6] elif subsession.session.config['fix_rounds'] == 3: #T3③ shuffle_matrix = [19,11,7,8,15,4,13,6,3,12,1,16,20,5,14,18,10,9,2,17] elif subsession.session.config['fix_rounds'] == 4: #T4① shuffle_matrix = [13,18,10,2,4,12,14,1,9,11,20,7,3,17,5,19,16,15,8,6] elif subsession.session.config['fix_rounds'] == 5: #T4② shuffle_matrix = [5,20,12,10,13,16,3,17,1,18,4,9,2,19,14,15,8,7,6,11] elif subsession.session.config['fix_rounds'] == 6: #T4③ shuffle_matrix = [10,2,1,14,18,4,11,13,3,8,15,9,7,19,6,12,17,5,16,20] else: import random random.seed(C.seed) shuffle_matrix = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20] random.shuffle(shuffle_matrix) group_matrix = [i for _,i in sorted(zip(shuffle_matrix,group_matrix))] time_discount_list = [i for _,i in sorted(zip(shuffle_matrix, time_discount_list))] p1 = [i for _,i in sorted(zip(shuffle_matrix, p1))] p2 = [i for _,i in sorted(zip(shuffle_matrix, p2))] p3 = [i for _,i in sorted(zip(shuffle_matrix, p3))] p4 = [i for _,i in sorted(zip(shuffle_matrix, p4))] treatment_id_list = [i for _,i in sorted(zip(shuffle_matrix, [i for i in range(1, 21)]))] #shuffle_matrix, p1, p2, p3, p4 = zip(*sorted(zip(shuffle_matrix, p1, p2, p3, p4))) #p1=list(p1)でも良い ############################ subsession.set_group_matrix(group_matrix[subsession.round_number -1 ]) subsession.treatment_id = treatment_id_list[subsession.round_number -1] for g in subsession.get_groups(): g.buyout_price = 740 g.set_num_of_group() private_value_list = (subsession.session.num_participants // 4)*[p1,p2,p3,p4] for p in subsession.get_players(): p.private_value=c(private_value_list[p.participant.id_in_session -1][g.round_number-1]) p.pay_amount = p.private_value - p.group.buyout_price if p.pay_amount > 0: p.pay_amount2 = str(p.pay_amount) #ブラウザ上でマイナス(-)が見にくいので、-をーに変えて見やすくするために作った else: p.pay_amount2 = "ー" + str(p.pay_amount*-1) p.time_discount_rate = time_discount_list[g.round_number-1] p.discounted_private_value = p.time_discount_rate * p.private_value p.delta_value = subsession.delta * p.private_value p.time_discount_percentage = int(subsession.delta * 100) class Group(BaseGroup): import random buyout_price = models.CurrencyField() is_sold = models.IntegerField( initial=0 ) highest_bid = models.CurrencyField() payment_price = models.CurrencyField() num_buyout_in_group = models.IntegerField() num_of_group = models.IntegerField() def set_num_of_group(group): group.num_of_group = len(group.get_players()) def set_buyout(group): import random players = group.get_players() if sum([p.is_buyout for p in players])>998: group.is_sold = 1 else: group.is_sold = 0 players_choosing_buyout = [ p for p in players if p.is_buyout == 999 ] group.num_buyout_in_group = len(players_choosing_buyout) if group.is_sold == 1: winning_buyer = [random.choice(players_choosing_buyout)] for w in winning_buyer: w.is_winning_buyer = True else: None for p in players: p.set_payoff() def set_winner(group): import random players = group.get_players() players_bids = [p.bid_amount for p in players] players_bids.append(0) ordered_bids = sorted(players_bids, reverse = True) group.highest_bid = ordered_bids[0] group.payment_price = ordered_bids[1] players_with_highest_bid = [ p for p in players if p.bid_amount == group.highest_bid ] winner = [random.choice(players_with_highest_bid)] for w in winner: w.is_winning_bidder = True for p in players: p.set_pay_amount() for p in players: p.set_payoff() class Player(BasePlayer): private_value = models.CurrencyField() discounted_private_value = models.CurrencyField() delta_value = models.CurrencyField() bid_amount = models.CurrencyField( min=C.min_allowable_bid, max=C.max_allowable_bid, label="" ) time_discount_rate = models.FloatField(initial=1) time_discount_percentage = models.IntegerField() pay_amount = models.CurrencyField() pay_amount2 = models.StringField(initial=" ") #ブラウザ上でマイナス(-)が見にくいので、-をーに変えて見やすくするために作った is_buyout = models.IntegerField() is_winning_buyer = models.BooleanField( initial=False ) is_winning_bidder = models.BooleanField( initial=False ) def set_pay_amount(player): if player.is_winning_bidder == True: player.pay_amount = player.group.payment_price else: player.pay_amount = 0 def set_payoff(player): if player.is_winning_buyer == True: player.payoff = player.private_value - player.group.buyout_price elif player.is_winning_bidder == True: player.payoff = player.discounted_private_value - player.pay_amount else: player.payoff = 0 #################### class Introduction(Page): timeout_seconds = 10 timer_text = '' class Buyout(Page): form_model = 'player' form_fields = ['is_buyout'] timeout_seconds = 90 timer_text = '' class BuyoutWaitPage(WaitPage): template_name = 'auction_2nd_buyout/BuyoutWaitPage.html' body_text = '' title_text = '' after_all_players_arrive = 'set_buyout' class Bid(Page): def is_displayed(player): return player.group.is_sold == 0 form_model = 'player' form_fields = ['bid_amount'] timeout_seconds = 60 timer_text = '' class ResultsWaitPage(WaitPage): def is_displayed(player): return player.group.is_sold == 0 template_name = 'auction_2nd_buyout/ResultsWaitPage.html' body_text = '' title_text = '' after_all_players_arrive = 'set_winner' class Results(Page): timeout_seconds = 15 timer_text = '' class RematchDummy(Page): def is_displayed(player): return player.round_number != C.NUM_ROUNDS timeout_seconds = 3 class FinalResults(Page): def is_displayed(player): return player.round_number == C.NUM_ROUNDS page_sequence = [Introduction, Buyout, BuyoutWaitPage, Bid, ResultsWaitPage, Results, RematchDummy, FinalResults]