Dpsm simu.hpp

4
dpsm_simu.hpp #ifndef DPSM_SIMU_HPP_INCLUDED #define DPSM_SIMU_HPP_INCLUDED #include "statistics.hpp" #include <vector> #include <string> /*-------------------------------------------------*/ class Salesman { public: Salesman(); ~Salesman(); void Init(int&); void Sell(); //Eine Einheit wurde verkauft void pAdjust(int); //Den Preis anpassen void SetStrategy(int t_ipr, int t_strategy, ...); //--------------------------------------------// //Anpassung-Algorithmen und zugehoerige Variablen int adj_count; //Nr. 0 void adjConst(); //Preis bleibt bei 0.5 //Nr. 1 void adjPara(); //Gradientenverfahren double adjParaM, adjParaP; int adjParaN; //Nr. 2 void adjI(); int adjI_N; double adjI_size; //Nr. 3 void adjClimb(); //Bergsteiger double adjClimbSW; //Schrittweite //Nr. 4 void adjSimAnn(); //Simuliertes abkuehlen double adjSimAnn_T; //Temperatur double adjSimAnn_dT; //Abkuehlung double adjSimAnn_sw; //Schrittweite //--------------------------------------------// Seite 1

Transcript of Dpsm simu.hpp

Page 1: Dpsm simu.hpp

dpsm_simu.hpp

#ifndef DPSM_SIMU_HPP_INCLUDED

#define DPSM_SIMU_HPP_INCLUDED

#include "statistics.hpp"

#include <vector>

#include <string>

/*-------------------------------------------------*/

class Salesman

{ public:

Salesman(); ~Salesman();

void Init(int&); void Sell(); //Eine Einheit wurde verkauft void pAdjust(int); //Den Preis anpassen

void SetStrategy(int t_ipr, int t_strategy, ...); //--------------------------------------------// //Anpassung-Algorithmen und zugehoerige Variablen int adj_count;

//Nr. 0 void adjConst(); //Preis bleibt bei 0.5

//Nr. 1 void adjPara(); //Gradientenverfahren double adjParaM, adjParaP; int adjParaN;

//Nr. 2 void adjI(); int adjI_N; double adjI_size;

//Nr. 3 void adjClimb(); //Bergsteiger double adjClimbSW; //Schrittweite

//Nr. 4 void adjSimAnn(); //Simuliertes abkuehlen double adjSimAnn_T; //Temperatur double adjSimAnn_dT; //Abkuehlung double adjSimAnn_sw; //Schrittweite

//--------------------------------------------//

Seite 1

Page 2: Dpsm simu.hpp

dpsm_simu.hpp

int x, y; //Koordinaten double p; //Preis double earnings; int sales, visits;

//Gewinn vor n runden double earnings_at(int n); //Preis vor n runden double p_at(int n);

/* Strategien 0 : p=0.5 konst, 1 : Gradient 2 : Back-Forward */ int strategy;

int ipr; //Iterationen pro Runde

//Log std::vector<double> log_earnings; std::vector<double> log_p;

};

/*-------------------------------------------------*/

class Customer

{ public: Customer(); ~Customer();

//Parameter static int sleep_time; //Iterationen, die zwischen zwei Kaeufern

min. vergehen müssen static int walk_time; //Anzahl Random-Walks die der Kaeufer nach

dem Kaufen macht static double parsimony;

static int memory; //Anzahl Random-Walks die der Kaeufer nach

dem Kaufen macht static double mem_k; //Anzahl Random-Walks die der Kaeufer nach

dem Kaufen macht

//Log_verteilung static bool log_norm; static double log_norm_ev; //Erwartungswert static double log_norm_var; //Varianz

void Init(int& grid_size);

Seite 2

Page 3: Dpsm simu.hpp

dpsm_simu.hpp inline void Walk(int& grid_size); //Ein Schritt des Random-Walks void Buy(int& grid_size); //Käufer hat eingekauft

double BuyProbability(double p);

int x, y; //Koordinaten int time_to_sleep; //Wie viele Iteration müssen bis zum nächsten

Kauf vergehen

double theta; //Nutzen

std::vector<int> log_smid;

};

/*-------------------------------------------------*/

class DPSM

{ public: //Parameter int grid_size; //Groesse des Gitters: grid_size X grid_size int num_iterations; //Anzahl Iterations int num_customers; //Anzahl Kunden int num_salesman; //Anzahl Verkaeufer int log_bin_size; //Die Anzahl der Iterationen

double unit_cost; //Stueckkosten double storage_cost; //Lagerkosten pro Iteration

//Konstruktor und Destruktor DPSM(); ~DPSM();

//Simulation starten void Start();

//Kaeufer und Verkaeufer initialisieren void InitPeople(); void InitCustomer(); //Statistiken initialisieren void InitStats();

/* Prueft ob sich ein Verkaufer auf der Position (x, y) befindet und gibt, wenn ja, seine ID zurueck, ansonsten -1 */ int CheckPosition(int x, int y, int self_id = -1);

/* Prueft ob der Kaeufer beim Verkauefer kauft und fuehrt die Transaktion durch */

Seite 3

Page 4: Dpsm simu.hpp

dpsm_simu.hpp void CheckDeal(int &customer_id, int &salesman_id);

//Gibt die Gesamtgewinne und Positionen der Verkaeufer aus void ShowEarnings();

int it; //Momentane Iteration

std::string file_prefix; //Der Prefix fuer die Dateien der

Ausgabe std::string file_path; //Der Pfad, in den die ausgabe Dateien

abgelegt werden (muss existieren)

std::vector<Customer> cust; //Kaeufer std::vector<Salesman> salesm; //Verkaeufer

Statistics stat;

};

#endif // DPSM_SIMU_HPP_INCLUDED

Seite 4