Dpsm simu.hpp
-
Upload
benjamin-faerber -
Category
Science
-
view
168 -
download
0
Transcript of 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
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
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
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