# -*- coding: utf-8 -*- """ Created on Fri Oct 15 16:52:39 2021 @author: mvessen """ import pandas as pd import biogeme.database as db import biogeme.biogeme as bio import biogeme.models as models import biogeme.expressions as ex import numpy as np import time import warnings import random if run_biogeme: #maak biogeme database subdf["CHOICE"] = subdf["I"] subdf["WEIGHT"] = subdf[weegfactor] / subdf[weegfactor].mean() subdf.drop(columns=["H","I","J"],inplace=True) #verwijder kolommen die niet worden gebruikt in de schatting database = db.Database("octavius_"+keten_str,subdf) globals().update(database.variables) #maak benodigde parameters aan locatie_vars = zone_variabelen + trip_variabelen tot_vars = locatie_vars + pers_variabelen parameter_dic = {} for var in tot_vars: if var in {"ARB_TOT"}: parameter_dic[var] = ex.Beta("B_"+var,1,None,None,1) elif var in {"INW","LLP_TOT"}: parameter_dic[var] = ex.exp(ex.Beta("B_"+var,0,None,None,0)) else: parameter_dic[var] = ex.Beta("B_"+var,0,None,None,0) print("aantal kolommen:",len(subdf.columns)) print("aantal variabelen:",len(parameter_dic)) print(list(parameter_dic.keys())) #maak kostenfuncties u_functions = {} av = {} for i in pc4_zones: terms1 = [] terms2 = [] for var in tot_vars: if var in {"LLP_BAS","LLP_MID","LLP_MBO","LLP_HO","LLP_TOT","ARB_OND","ARB_IND","ARB_KAN","ARB_WIN","ARB_OVE","ARB_TOT","INW"}: terms2.append(parameter_dic[var] * db.Variable(var+str(i))) else: terms1.append(parameter_dic[var] * db.Variable(var+str(i))) u_functions[i] = sum(terms1) + ex.log(sum(terms2)) av[i] = db.Variable("AV"+str(i)) #maak logprob model print("start biogeme...") logprob = models.loglogit(u_functions,av,CHOICE) formulas = {'loglike':logprob,'weight':WEIGHT} biogeme = bio.BIOGEME(database,formulas) biogeme.modelName = "octavius_"+keten_str+"_"+str(max_waarnemingen)+"_"+str(grenswaarde_reistijd) # Schat parameters results = biogeme.estimate(saveIterations=True) biogeme.createLogFile() #Schrijf parameters weg naar tekst bestand pandasResults = results.getEstimatedParameters()