from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) doc = '.\n\nUn juego de bienes publicos (take-something)' class Constants(BaseConstants): name_in_url = 'ExtraccionSV4' players_per_group = 3 num_rounds = 3 endowment1 = c(12) endowment2 = c(9) endowment3 = c(6) ext = 5 RenA = 17 RenB = 5 admin_report_template = 'ExtraccionSV4/admin_report.html' instructiones_template = 'ExtraccionSV4/instructiones.html' class Subsession(BaseSubsession): def creating_session(self): if self.round_number ==1: self.group_randomly(fixed_id_in_group = True) else: self.group_like_round(1) class Group(BaseGroup): total_contribution = models.CurrencyField() individual_share = models.CurrencyField() contribution1 = models.CurrencyField(choices=[[0, '0 fichas'], [1, '1 ficha'], [2, '2 fichas'], [3, '3 fichas'], [4, '4 fichas'], [5, '5 fichas'], [6, '6 fichas'], [7, '7 fichas'], [8, '8 fichas'], [9, '9 fichas'], [10, '10 fichas'], [11, '11 fichas'], [12, '12 fichas']], initial=Constants.endowment1, label='Fichas en la actividad extractiva:', max=Constants.endowment1, min=0) contribution2 = models.CurrencyField(choices=[[0, '0 fichas'], [1, '1 ficha'], [2, '2 fichas'], [3, '3 fichas'], [4, '4 fichas'], [5, '5 fichas'], [6, '6 fichas'], [7, '7 fichas'], [8, '8 fichas'], [9, '9 fichas']], initial=Constants.endowment2, label='Fichas en la actividad extractiva:', max=Constants.endowment2, min=0) contribution3 = models.CurrencyField(choices=[[0, '0 fichas'], [1, '1 ficha'], [2, '2 fichas'], [3, '3 fichas'], [4, '4 fichas'], [5, '5 fichas'], [6, '6 fichas']], initial=Constants.endowment3, label='Fichas en la actividad extractiva:', max=Constants.endowment3, min=0) def set_payoffs(self): self.total_contribution = sum([self.contribution1, self.contribution2, self.contribution3]) self.individual_share = (self.total_contribution * Constants.ext) p1 = self.get_player_by_id(1) p2 = self.get_player_by_id(2) p3 = self.get_player_by_id(3) p1.payoff = Constants.RenB*(Constants.endowment1 -self.contribution1) + (Constants.RenA*self.contribution1) - self.individual_share + 80 p2.payoff = Constants.RenB*(Constants.endowment2 - self.contribution2) + (Constants.RenA*self.contribution2) - self.individual_share + 80 p3.payoff = Constants.RenB*(Constants.endowment3 - self.contribution3) + (Constants.RenA*self.contribution3) - self.individual_share + 80 class Player(BasePlayer): payoff_app7 = models.LongStringField() amb_1 = models.StringField(choices=[['1', 'Fuertemente en desacuerdo'], ['2', 'En desacuerdo'], ['3', 'Ni de acuerdo ni en desacuerdo'], ['4', 'De acuerdo'], ['5', 'Fuertemente de acuerdo']], label='Estamos aproximándonos al número límite de personas que la tierra puede soportar o mantener.', widget=widgets.RadioSelect) amb_2 = models.StringField(choices=[['1', 'Fuertemente en desacuerdo'], ['2', 'En desacuerdo'], ['3', 'Ni de acuerdo ni en desacuerdo'], ['4', 'De acuerdo'], ['5', 'Fuertemente de acuerdo']], label='Los seres humanos tienen derecho a modificar el medio ambiente natural para satisfacer sus necesidades.', widget=widgets.RadioSelect) amb_3 = models.StringField(choices=[['1', 'Fuertemente en desacuerdo'], ['2', 'En desacuerdo'], ['3', 'Ni de acuerdo ni en desacuerdo'], ['4', 'De acuerdo'], ['5', 'Fuertemente de acuerdo']], label='Cuando los seres humanos interfieren con la naturaleza, las consecuencias son a menudo desastrosas.', widget=widgets.RadioSelect) amb_4 = models.StringField(choices=[['1', 'Fuertemente en desacuerdo'], ['2', 'En desacuerdo'], ['3', 'Ni de acuerdo ni en desacuerdo'], ['4', 'De acuerdo'], ['5', 'Fuertemente de acuerdo']], label='La inventiva humana asegurará que no convirtamos la Tierra en inhabitable.', widget=widgets.RadioSelect) amb_5 = models.StringField(choices=[['1', 'Fuertemente en desacuerdo'], ['2', 'En desacuerdo'], ['3', 'Ni de acuerdo ni en desacuerdo'], ['4', 'De acuerdo'], ['5', 'Fuertemente de acuerdo']], label='Los seres humanos están abusando severamente del medio ambiente.', widget=widgets.RadioSelect) amb_6 = models.StringField(choices=[['1', 'Fuertemente en desacuerdo'], ['2', 'En desacuerdo'], ['3', 'Ni de acuerdo ni en desacuerdo'], ['4', 'De acuerdo'], ['5', 'Fuertemente de acuerdo']], label='La tierra tiene recursos naturales en abundancia y sólo tenemos que aprender cómo desarrollarlos.', widget=widgets.RadioSelect) amb_7 = models.StringField(choices=[['1', 'Fuertemente en desacuerdo'], ['2', 'En desacuerdo'], ['3', 'Ni de acuerdo ni en desacuerdo'], ['4', 'De acuerdo'], ['5', 'Fuertemente de acuerdo']], label='Las plantas y los animales tienen tanto derecho a existir como los seres humanos. ', widget=widgets.RadioSelect) amb_8 = models.StringField(choices=[['1', 'Fuertemente en desacuerdo'], ['2', 'En desacuerdo'], ['3', 'Ni de acuerdo ni en desacuerdo'], ['4', 'De acuerdo'], ['5', 'Fuertemente de acuerdo']], label='El equilibrio de la naturaleza es lo bastante fuerte como para ajustarse a los impactos de los países industriales modernos.', widget=widgets.RadioSelect) amb_9 = models.StringField(choices=[['1', 'Fuertemente en desacuerdo'], ['2', 'En desacuerdo'], ['3', 'Ni de acuerdo ni en desacuerdo'], ['4', 'De acuerdo'], ['5', 'Fuertemente de acuerdo']], label='Pese a nuestras especiales capacidades, los seres humanos seguimos estando sujetos a las leyes de la naturaleza.', widget=widgets.RadioSelect) amb_10 = models.StringField(choices=[['1', 'Fuertemente en desacuerdo'], ['2', 'En desacuerdo'], ['3', 'Ni de acuerdo ni en desacuerdo'], ['4', 'De acuerdo'], ['5', 'Fuertemente de acuerdo']], label='La llamada “crisis ecológica” de la humanidad ha sido muy exagerada. ', widget=widgets.RadioSelect) amb_11 = models.StringField(choices=[['1', 'Fuertemente en desacuerdo'], ['2', 'En desacuerdo'], ['3', 'Ni de acuerdo ni en desacuerdo'], ['4', 'De acuerdo'], ['5', 'Fuertemente de acuerdo']], label='La tierra es como una nave espacial con espacio y recursos muy limitados.', widget=widgets.RadioSelect) amb_12 = models.StringField(choices=[['1', 'Fuertemente en desacuerdo'], ['2', 'En desacuerdo'], ['3', 'Ni de acuerdo ni en desacuerdo'], ['4', 'De acuerdo'], ['5', 'Fuertemente de acuerdo']], label='Los seres humanos fueron creados para dominar sobre el resto del mundo natural.', widget=widgets.RadioSelect) amb_13 = models.StringField(choices=[['1', 'Fuertemente en desacuerdo'], ['2', 'En desacuerdo'], ['3', 'Ni de acuerdo ni en desacuerdo'], ['4', 'De acuerdo'], ['5', 'Fuertemente de acuerdo']], label='El equilibrio de la naturaleza es muy delicado y fácil de perturbar. ', widget=widgets.RadioSelect) amb_14 = models.StringField(choices=[['1', 'Fuertemente en desacuerdo'], ['2', 'En desacuerdo'], ['3', 'Ni de acuerdo ni en desacuerdo'], ['4', 'De acuerdo'], ['5', 'Fuertemente de acuerdo']], label='Los seres humanos aprenderán lo suficiente sobre el funcionamiento de la naturaleza para ser capaces de controlarla. ', widget=widgets.RadioSelect) amb_15 = models.StringField(choices=[['1', 'Fuertemente en desacuerdo'], ['2', 'En desacuerdo'], ['3', 'Ni de acuerdo ni en desacuerdo'], ['4', 'De acuerdo'], ['5', 'Fuertemente de acuerdo']], label='Si las cosas continúan como hasta ahora, pronto experimentaremos una gran catástrofe ecológica', widget=widgets.RadioSelect) coop_1 = models.IntegerField(choices=[[0, '0'], [1, '1'], [2, '2'], [3, '3'], [4, '4'], [5, '5'], [6, '6'], [7, '7'], [8, '8'], [9, '9'], [10, '10']], label='Cuando alguien me hace un favor, estoy dispuesto a devolverlo. ') coop_2 = models.IntegerField(choices=[[0, '0'], [1, '1'], [2, '2'], [3, '3'], [4, '4'], [5, '5'], [6, '6'], [7, '7'], [8, '8'], [9, '9'], [10, '10']], label='Si me tratan muy injustamente, tomaré revancha en la primera ocasión, incluso aunque deba pagar un costo por ello. ') coop_5 = models.IntegerField(choices=[[0, '0'], [1, '1'], [2, '2'], [3, '3'], [4, '4'], [5, '5'], [6, '6'], [7, '7'], [8, '8'], [9, '9'], [10, '10']], label='¿Qué tan dispuesto esta usted a castigar a alguien que lo(a) trata a usted injustamente, incluso cuando existan riesgos para usted de sufrir consecuencias personales?') coop_3 = models.StringField(choices=[['SI', 'SI'], ['NO', 'NO']], label='¿Le daría al extraño uno de los obsequios como agradecimiento? ') coop_4 = models.IntegerField(choices=[[1, 'No, no le entregaría ningún obsequio '], [2, 'El obsequio que cuesta 1.500 Pesos '], [3, 'El obsequio que cuesta 3.000 Pesos '], [4, 'El obsequio que cuesta 4.500 Pesos '], [5, 'El obsequio que cuesta 6.000 Pesos '], [6, 'El obsequio que cuesta 7.500 Pesos '], [7, 'El obsequio que cuesta 9.000 Pesos ']], label='¿Qué obsequio le entregaría?') coop_6 = models.IntegerField(choices=[[0, '0'], [1, '1'], [2, '2'], [3, '3'], [4, '4'], [5, '5'], [6, '6'], [7, '7'], [8, '8'], [9, '9'], [10, '10']], label='¿Qué tan dispuesto(a) esta usted a castigar a alguien que trata a los demás injustamente, incluso cuando existan riesgos para usted de sufrir consecuencias personales?') Estrato = models.IntegerField(label='¿En cuál estrato está ubicada su casa?') Genero = models.IntegerField(blank=True, choices=[[1, 'Mujer'], [0, 'Hombre']], label='¿Cuál es su género?') Exp = models.StringField(choices=[['SI', 'SI'], ['NO', 'NO']], label='¿Ha participado en actividades similares a ésta (experimentos económicos)? ') carrera = models.StringField(label='¿De cuál carrera (pregrado) se graduó o cuál está cursando?') Daviplata = models.StringField(label='Daviplata') def role(self): if self.id_in_group == 1: return "Jugador X" if self.id_in_group == 2: return "Jugador Y" if self.id_in_group == 3: return "Jugador Z" def payoff_app(self): return sum([self.in_round(self.round_number - 1).payoff]+[self.in_round(self.round_number-2).payoff]+[self.in_round(self.round_number).payoff])