from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) author = '' doc = """ 2D Packing Problem - Experiment """ class Constants(BaseConstants): name_in_url = 'packing_experiment' players_per_group = None num_rounds = 1 goal_correct_value = 'Packing all items while minimizing the used height in the given container' numberOfRounds_correct_value = '4 Rounds' rotationAllowed_correct_value = 'Yes, in all of the rounds' move_correct_value = 'Depends, only the most recently packed item can be moved' class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): numberOfRounds = models.StringField(choices=['4 Rounds', '6 Rounds', '8 Rounds'], label='How many rounds of packing tasks will you need to complete?', ) def numberOfRounds_error_message(self, numberOfRounds): if numberOfRounds != Constants.numberOfRounds_correct_value: return "Error: The entered value was incorrect. Please try again." rotationAllowed = models.StringField(choices=['Yes, in all of the rounds', 'No, rotation will never be possible', 'Yes, but only in half of the rounds'], label='Will you be able to rotate boxes?', ) def rotationAllowed_error_message(self, rotationAllowed): if rotationAllowed != Constants.rotationAllowed_correct_value: return "Error: The entered value was incorrect. Please try again." move = models.StringField(choices=['Yes, every item can be moved at any time', 'No, once an item is placed it is impossible to change its position', 'Depends, only the most recently packed item can be moved'], label='Will you be able to move boxes after you have placed them inside the container?', ) def move_error_message(self, move): if move != Constants.move_correct_value: return "Error: The entered value was incorrect. Please try again." goal = models.StringField(choices=['Packing all items in the least possible number of containers', 'Packing all items while minimizing the used height in the given container', 'Filling the container as efficiently as possible with selected items'], label='What should you aim for in the following pages?', ) def goal_error_message(self, goal): if goal != Constants.goal_correct_value: return "Error: The entered value was incorrect. Please try again." x1 = models.IntegerField() y1 = models.IntegerField() x2 = models.IntegerField() y2 = models.IntegerField() x3 = models.IntegerField() y3 = models.IntegerField() x4 = models.IntegerField() y4 = models.IntegerField() x5 = models.IntegerField() y5 = models.IntegerField() x6 = models.IntegerField() y6 = models.IntegerField() x7 = models.IntegerField() y7 = models.IntegerField() x8 = models.IntegerField() y8 = models.IntegerField() x9 = models.IntegerField() y9 = models.IntegerField() x10 = models.IntegerField() y10 = models.IntegerField() x11 = models.IntegerField() y11 = models.IntegerField() x12 = models.IntegerField() y12 = models.IntegerField() x13 = models.IntegerField() y13 = models.IntegerField() x14 = models.IntegerField() y14 = models.IntegerField() x15 = models.IntegerField() y15 = models.IntegerField() seq1 = models.StringField() seq2 = models.StringField() seq3 = models.StringField() seq4 = models.StringField() seq5 = models.StringField() seq6 = models.StringField() seq7 = models.StringField() seq8 = models.StringField() seq9 = models.StringField() seq10 = models.StringField() seq11 = models.StringField() seq12 = models.StringField() seq13 = models.StringField() seq14 = models.StringField() seq15 = models.StringField() highestPoint = models.IntegerField() aRotationCounter = models.IntegerField() bx1 = models.IntegerField() by1 = models.IntegerField() bx2 = models.IntegerField() by2 = models.IntegerField() bx3 = models.IntegerField() by3 = models.IntegerField() bx4 = models.IntegerField() by4 = models.IntegerField() bx5 = models.IntegerField() by5 = models.IntegerField() bx6 = models.IntegerField() by6 = models.IntegerField() bx7 = models.IntegerField() by7 = models.IntegerField() bx8 = models.IntegerField() by8 = models.IntegerField() bx9 = models.IntegerField() by9 = models.IntegerField() bx10 = models.IntegerField() by10 = models.IntegerField() bx11 = models.IntegerField() by11 = models.IntegerField() bx12 = models.IntegerField() by12 = models.IntegerField() bx13 = models.IntegerField() by13 = models.IntegerField() bx14 = models.IntegerField() by14 = models.IntegerField() bx15 = models.IntegerField() by15 = models.IntegerField() bseq1 = models.StringField() bseq2 = models.StringField() bseq3 = models.StringField() bseq4 = models.StringField() bseq5 = models.StringField() bseq6 = models.StringField() bseq7 = models.StringField() bseq8 = models.StringField() bseq9 = models.StringField() bseq10 = models.StringField() bseq11 = models.StringField() bseq12 = models.StringField() bseq13 = models.StringField() bseq14 = models.StringField() bseq15 = models.StringField() r1 = models.IntegerField() r2 = models.IntegerField() r3 = models.IntegerField() r4 = models.IntegerField() r5 = models.IntegerField() r6 = models.IntegerField() r7 = models.IntegerField() r8 = models.IntegerField() r9 = models.IntegerField() r10 = models.IntegerField() r11 = models.IntegerField() r12 = models.IntegerField() r13 = models.IntegerField() r14 = models.IntegerField() r15 = models.IntegerField() bHighestPoint = models.IntegerField() bRotationCounter = models.IntegerField() cx1 = models.IntegerField() cy1 = models.IntegerField() cx2 = models.IntegerField() cy2 = models.IntegerField() cx3 = models.IntegerField() cy3 = models.IntegerField() cx4 = models.IntegerField() cy4 = models.IntegerField() cx5 = models.IntegerField() cy5 = models.IntegerField() cx6 = models.IntegerField() cy6 = models.IntegerField() cx7 = models.IntegerField() cy7 = models.IntegerField() cx8 = models.IntegerField() cy8 = models.IntegerField() cx9 = models.IntegerField() cy9 = models.IntegerField() cx10 = models.IntegerField() cy10 = models.IntegerField() cx11 = models.IntegerField() cy11 = models.IntegerField() cx12 = models.IntegerField() cy12 = models.IntegerField() cx13 = models.IntegerField() cy13 = models.IntegerField() cx14 = models.IntegerField() cy14 = models.IntegerField() cx15 = models.IntegerField() cy15 = models.IntegerField() cseq1 = models.StringField() cseq2 = models.StringField() cseq3 = models.StringField() cseq4 = models.StringField() cseq5 = models.StringField() cseq6 = models.StringField() cseq7 = models.StringField() cseq8 = models.StringField() cseq9 = models.StringField() cseq10 = models.StringField() cseq11 = models.StringField() cseq12 = models.StringField() cseq13 = models.StringField() cseq14 = models.StringField() cseq15 = models.StringField() cHighestPoint = models.IntegerField() cRotationCounter = models.IntegerField() dx1 = models.IntegerField() dy1 = models.IntegerField() dx2 = models.IntegerField() dy2 = models.IntegerField() dx3 = models.IntegerField() dy3 = models.IntegerField() dx4 = models.IntegerField() dy4 = models.IntegerField() dx5 = models.IntegerField() dy5 = models.IntegerField() dx6 = models.IntegerField() dy6 = models.IntegerField() dx7 = models.IntegerField() dy7 = models.IntegerField() dx8 = models.IntegerField() dy8 = models.IntegerField() dx9 = models.IntegerField() dy9 = models.IntegerField() dx10 = models.IntegerField() dy10 = models.IntegerField() dx11 = models.IntegerField() dy11 = models.IntegerField() dx12 = models.IntegerField() dy12 = models.IntegerField() dx13 = models.IntegerField() dy13 = models.IntegerField() dx14 = models.IntegerField() dy14 = models.IntegerField() dx15 = models.IntegerField() dy15 = models.IntegerField() dseq1 = models.StringField() dseq2 = models.StringField() dseq3 = models.StringField() dseq4 = models.StringField() dseq5 = models.StringField() dseq6 = models.StringField() dseq7 = models.StringField() dseq8 = models.StringField() dseq9 = models.StringField() dseq10 = models.StringField() dseq11 = models.StringField() dseq12 = models.StringField() dseq13 = models.StringField() dseq14 = models.StringField() dseq15 = models.StringField() dHighestPoint = models.IntegerField() dRotationCounter = models.IntegerField()