from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) # Imports for Neural Network import pandas as pd from sklearn.neural_network import MLPRegressor import joblib import random author = 'Your name here' doc = """ Your app description """ ###### Load Neural Networks for inference # loaded_model_test = joblib.load(r'C:\Users\Robin\Dropbox\Eigene Dateien_Robin IISM\06 Dissertation\13 P3\02 Erhebung Orga\01 oTree\02 oTree Python\testproject\TestNN_vw2.pkl') def make_field(label): return models.IntegerField( choices=[1,2,3,4,5,6,7], label=label, widget=widgets.RadioSelectHorizontal, ) class Constants(BaseConstants): name_in_url = 'testapp' players_per_group = None num_rounds = 1 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): # Random Szenario Variable 1 bis 4 exp_zelle = models.IntegerField() rat1 = make_field("Finanzentscheidungen treffe ich gerne sachlich, durch Analyse von Vor- und Nachteilen, nicht nach Gefühl.") ration_superior = models.IntegerField(widget=widgets.RadioSelect, choices=[1, 2, 3, 4, 5, 6, 7]) emostab1 = models.IntegerField(widget=widgets.RadioSelect, choices=[1, 2, 3, 4, 5, 6, 7]) # Algo pred_vw2 = models.FloatField() def nnet_vw2(self): ## Create Input Vector for specific player columns = [ 'rat1', 'ration_superior', 'emostab1' ] features = { 'rat1': self.rat1, 'ration_superior': self.ration_superior, 'emostab1': self.emostab1 } # Create the Input Vector for prediction (as a Dataframe) features_vector = pd.DataFrame([features], columns=columns) ## Make Prediction pred = loaded_model_test.predict(features_vector) # If smaller 0, make it 0.01; if larger make it 9.99 # pred_final = max(0.01, min(round(pred[0], 2), 9.99)) pred_final = pred[0] ## Save Output in player class variable self.pred_vw2 = pred_final return(pred_final) def rnd(self): zelle = random.randint(1, 4) self.exp_zelle = zelle offer = zelle + 10 return(offer)