Skip to content

Commit

Permalink
Added a ton of files for tomorrows presentation
Browse files Browse the repository at this point in the history
  • Loading branch information
Johannes Hofmeister committed Jun 25, 2013
1 parent 68f261a commit 71b311d
Show file tree
Hide file tree
Showing 20 changed files with 830 additions and 0 deletions.
Binary file added EmpathicRefactoring.pptx
Binary file not shown.
Binary file added Funkte-Temp.pptx
Binary file not shown.
Binary file added Python/Thumbs.db
Binary file not shown.
170 changes: 170 additions & 0 deletions Refactoring/01_calc_formulas.as
@@ -0,0 +1,170 @@
function calcFormulas():Boolean {

var returnValue:Boolean = false;

var x:Number;
var y:Number;
var x1:Number;

//====================================
// Änderungen - Kosten Updaten
//====================================

//Rohstoff auf Lager
//kann nicht reduziert werden
//g_var['RL'] = Math.max(g_var['RL'], g_oldvar['RL']);
//g_var['KA'] = g_var['KA'] - (g_var['RP'] * (g_var['RL'] - g_oldvar['RL']));
g_var['RL'] = g_var['RL'] + g_var['RB'];
g_var['KA'] = g_var['KA'] - (g_var['RP'] * (g_var['RB']));

//50er Maschinen
if (g_var['M1'] > g_oldvar['M1']) { //Maschinen kaufen
g_var['KA'] = g_var['KA'] - (10000 * (g_var['M1'] - g_oldvar['M1']));
}
else if (g_var['M1'] < g_oldvar['M1']) { //Maschinen verkaufen
x = g_var['MA'] / g_var['MM'];
g_var['KA'] = g_var['KA'] + (x * 8000 * (g_oldvar['M1'] - g_var['M1']));
}

//100er Maschinen
if (g_var['M2'] > g_oldvar['M2']) { //Maschinen kaufen
g_var['KA'] = g_var['KA'] - (20000 * (g_var['M2'] - g_oldvar['M2']));
}
else if (g_var['M2'] < g_oldvar['M2']) {
x = g_var['MA'] / g_var['MM'];
g_var['KA'] = g_var['KA'] + (x * 16000 * (g_oldvar['M2'] - g_var['M2']));
}


if (g_var['LW'] > g_oldvar['LW']) {
g_var['KA'] = g_var['KA'] - (10000 * (g_var['LW'] - g_oldvar['LW']));
}
else if (g_var['LW'] < g_oldvar['LW']) { //Lieferwagen verkaufen
g_var['KA'] = g_var['KA'] + ((8000 - (g_current_round * 100)) * (g_oldvar['M2'] - g_var['M2']));
}

g_var['ZA'] = Math.min(g_var['ZM'], 0.5 + ((g_var['LO'] - 850) / 550) + (g_var['SM'] / 800));
g_var['SK'] = g_var['SM'] * (g_var['A1'] + g_var['A2']);
//Flüssigkapital Update 1
// KA
g_var['KA'] = g_var['KA'] - g_var['SK'];

//Intern: Mögliches Produkt
// PM
x = Math.min(g_var['A1'], g_var['M1']);
y = Math.min(g_var['A2'], g_var['M2']);
g_var['PM'] = ((x * (g_var['MA'] + 4 * randomNumber(g_current_round,1) - 2)) + (y * (2 * g_var['MA'] + 6 * randomNumber(g_current_round,2) - 3))) * Math.sqrt(Math.abs(g_var['ZA']));

//Produkt auf Lager
// 'PL'
g_var['PL'] = Math.min(g_var['PM'], g_var['RL']);

// Hemden im Lager
// 'HL'
g_var['HL'] = g_var['HL'] + g_var['PL'];

// Rohmaterial im Lager
// 'RL'
g_var['RL'] = g_var['RL'] - g_var['PL'];

//Flüssigkapital Update 2 - Lagerungskosten
// KA
g_var['KA'] = g_var['KA'] - (g_var['PL']*1) - (g_var['RL']*0.5);

// Nachfrage
// 'NA'
g_var['NA'] = ((g_var['NA']/2) + 280) * 1.25 * Math.pow(2.7181, (-1 * (Math.pow(g_var['PH'],2)) / 4250) );

//Flüssigkapital Update 3 - Lagerungskosten
// KA
g_var['KA'] = g_var['KA'] - g_var['HL'];

// Verkauf
// 'VH'
g_var['VH'] = Math.min(g_var['HL'], g_var['NA']);
g_var['HL'] = g_var['HL'] - g_var['VH'];

//Flüssigkapital Update 4
// KA
g_var['KA'] = g_var['KA'] + (g_var['VH'] * g_var['PH']);

//Flüssigkapital Update 5
// KA
g_var['KA'] = g_var['KA'] - g_var['WE'];

//Flüssigkapital Update 6
// KA
g_var['KA'] = g_var['KA'] - (g_var['LW'] * 500);

//Flüssigkapital Update 7 - Geschäftslage
// KA
if (g_var['GL'] == 0.25) { // Vorstadt
g_var['KA'] = g_var['KA'] - (0.25 * 2000);
x = 0;
}
else if (g_var['GL'] == 0.5) { //Stadtrand
g_var['KA'] = g_var['KA'] - (0.5 * 2000);
x = 0.1;
}
else if (g_var['GL'] == 1) { //City
g_var['KA'] = g_var['KA'] - (1 * 2000);
x = 0.2;
}

x1 = Math.min((g_var['WE']/5), g_var['NM']);
x1 = x1 + (g_var['LW'] * 100);
x1 = x1 + (x1 * x);

// Nachfrage
// 'NA'
g_var['NA'] = x1 + (randomNumber(g_current_round,3) * 100) - 50;

// Preis Rohmaterial
// 'RP'
g_var['RP'] = 2 + (randomNumber(g_current_round,4) * 6.5);

//Maschinenkapazität
// 'MA'
g_var['MA'] = (0.9 * g_var['MA']) + ((g_var['RS'] / (g_var['M1'] + (g_var['M2'] * 0.00000001))) * 0.017);
if (isNaN(g_var['MA'])) { g_var['MA'] = 0; } // wenn NaN dann auf 0 setzen
g_var['MA'] = Math.min(g_var['MA'], g_var['MM']);


//Flüssigkapital Update 8
// KA
g_var['KA'] = g_var['KA'] - g_var['RS'];

// Lohn für 50er und 100er Arbeiter
g_var['KA'] = g_var['KA'] - ((g_var['A1'] + g_var['A2']) * g_var['LO']);

if (g_var['KA'] > 0) {
// Guthabenzins
g_var['KA'] = g_var['KA'] + (g_var['KA'] * g_var['GZ']);
}
else {
// Sollzins
g_var['KA'] = g_var['KA'] + (g_var['KA'] * g_var['SZ']);
}

//add constant factor as loaded from xml
g_var['KA'] = g_var['KA'] + g_addConstant;

//Gesamtkapital updaten
// 'GK'
x = g_var['MA'] / g_var['MM'];
g_var['GK'] = g_var['KA'] + (g_var['M1'] * (x * 8000)) + (g_var['M2'] * (x * 16000)) + (g_var['LW'] * (8000 - (g_current_round * 100))) + (g_var['RL'] * 2) + (g_var['HL'] * 20);

//Maschinenschäden
// 'MS'
g_var['MS'] = 1 - (g_var['MA'] / g_var['MM']);

//Produktionsausfall
// 'PA'
g_var['PA'] = 1 - (g_var['PL'] / g_var['PM']);
if (isNaN(g_var['PA'])) { g_var['PA'] = 1; } // wenn NaN dann auf 1 setzen


returnValue = true;
return returnValue;

}
168 changes: 168 additions & 0 deletions Refactoring/02_more_explicit_code.js
@@ -0,0 +1,168 @@
function calcFormulas(g_var, g_oldvar, g_current_round, g_addConstant) {

var x;
var y;
var x1;

//====================================
// Änderungen - Kosten Updaten
//====================================

//Rohstoff auf Lager kann nicht reduziert werden
g_var['MaterialStock'] = g_var['MaterialStock'] + g_var['MaterialOrdered'];
g_var['Account'] = g_var['Account'] - (g_var['MaterialPrice'] * (g_var['MaterialOrdered']));

//50er Maschinen
if (g_var['Machines50'] > g_oldvar['Machines50']) { //Maschinen kaufen
g_var['Account'] = g_var['Account'] - (10000 * (g_var['Machines50'] - g_oldvar['Machines50']));
}
else if (g_var['Machines50'] < g_oldvar['Machines50']) { //Maschinen verkaufen
x = g_var['CurrentMachineCapacity'] / g_var['MaximalMachineCapacity'];
g_var['Account'] = g_var['Account'] + (x * 8000 * (g_oldvar['Machines50'] - g_var['Machines50']));
}

//100er Maschinen
if (g_var['Machines100'] > g_oldvar['Machines100']) { //Maschinen kaufen
g_var['Account'] = g_var['Account'] - (20000 * (g_var['Machines100'] - g_oldvar['Machines100']));
}
else if (g_var['Machines100'] < g_oldvar['Machines100']) { //Maschinen verkaufen
x = g_var['CurrentMachineCapacity'] / g_var['MaximalMachineCapacity'];
g_var['Account'] = g_var['Account'] + (x * 16000 * (g_oldvar['Machines100'] - g_var['Machines100']));
}

//Lieferwagen
if (g_var['Distributors'] > g_oldvar['Distributors']) { //Lieferwagen kaufen
g_var['Account'] = g_var['Account'] - (10000 * (g_var['Distributors'] - g_oldvar['Distributors']));
}
else if (g_var['Distributors'] < g_oldvar['Distributors']) { //Lieferwagen verkaufen
g_var['Account'] = g_var['Account'] + ((8000 - (g_current_round * 100)) * (g_oldvar['Machines100'] - g_var['Machines100']));
}

//====================================
// Neue Werte berechnen
//====================================

// Arbeitszufriedenheit
// 'Satisfaction'
g_var['Satisfaction'] = Math.min(g_var['MaximalSatisfaction'], 0.5 + ((g_var['Salary'] - 850) / 550) + (g_var['Social'] / 800));

//Intern: Sozialkosten
// TotalSocialCosts
g_var['TotalSocialCosts'] = g_var['Social'] * (g_var['Workers50'] + g_var['Workers100']);

//Flüssigkapital Update 1
// Account
g_var['Account'] = g_var['Account'] - g_var['TotalSocialCosts'];

//Intern: Mögliches Produkt
// PossibleProduction
g_var.PossibleProduction = calculatePossibleProductionSprout(g_var, g_current_round);

//Produkt auf Lager
// 'ProductStock'
g_var['ProductStock'] = Math.min(g_var['PossibleProduction'], g_var['MaterialStock']);

// Hemden im Lager
// 'ShirtStock'
g_var['ShirtStock'] = g_var['ShirtStock'] + g_var['ProductStock'];

// Rohmaterial im Lager
// 'MaterialStock'
g_var['MaterialStock'] = g_var['MaterialStock'] - g_var['ProductStock'];

//Flüssigkapital Update 2 - Lagerungskosten
// Account
g_var['Account'] = g_var['Account'] - (g_var['ProductStock']*1) - (g_var['MaterialStock']*0.5);

// Nachfrage
// 'Demand'
g_var['Demand'] = ((g_var['Demand']/2) + 280) * 1.25 * Math.pow(2.7181, (-1 * (Math.pow(g_var['ShirtPrice'],2)) / 4250) );

//Flüssigkapital Update 3 - Lagerungskosten
// Account
g_var['Account'] = g_var['Account'] - g_var['ShirtStock'];

// Verkauf
// 'Sales'
g_var['Sales'] = Math.min(g_var['ShirtStock'], g_var['Demand']);
g_var['ShirtStock'] = g_var['ShirtStock'] - g_var['Sales'];

//Flüssigkapital Update 4
// Account
g_var['Account'] = g_var['Account'] + (g_var['Sales'] * g_var['ShirtPrice']);

//Flüssigkapital Update 5
// Account
g_var['Account'] = g_var['Account'] - g_var['Advertising'];

//Flüssigkapital Update 6
// Account
g_var['Account'] = g_var['Account'] - (g_var['Distributors'] * 500);



//Flüssigkapital Update 7 - Geschäftslage
// Account
if (g_var['Location'] == 0.25) { // Vorstadt
g_var['Account'] = g_var['Account'] - (0.25 * 2000);
x = 0;
}
else if (g_var['Location'] == 0.5) { //Stadtrand
g_var['Account'] = g_var['Account'] - (0.5 * 2000);
x = 0.1;
}
else if (g_var['Location'] == 1) { //City
g_var['Account'] = g_var['Account'] - (1 * 2000);
x = 0.2;
}

x1 = Math.min((g_var['Advertising']/5), g_var['NM']);
x1 = x1 + (g_var['Distributors'] * 100);
x1 = x1 + (x1 * x);

// Nachfrage
// 'Demand'
g_var['Demand'] = x1 + (randomNumber(g_current_round,3) * 100) - 50;

// Preis Rohmaterial
// 'MaterialPrice'
g_var['MaterialPrice'] = 2 + (randomNumber(g_current_round,4) * 6.5);

//Maschinenkapazität
// 'CurrentMachineCapacity'
g_var['CurrentMachineCapacity'] = (0.9 * g_var['CurrentMachineCapacity']) + ((g_var['Service'] / (g_var['Machines50'] + (g_var['Machines100'] * 0.00000001))) * 0.017);
if (isNaN(g_var['CurrentMachineCapacity'])) { g_var['CurrentMachineCapacity'] = 0; } // wenn NaN dann auf 0 setzen
g_var['CurrentMachineCapacity'] = Math.min(g_var['CurrentMachineCapacity'], g_var['MaximalMachineCapacity']);


//Flüssigkapital Update 8
// Account
g_var['Account'] = g_var['Account'] - g_var['Service'];
g_var['Account'] = g_var['Account'] - ((g_var['Workers50'] + g_var['Workers100']) * g_var['Salary']);

if (g_var['Account'] > 0) {
g_var['Account'] = g_var['Account'] + (g_var['Account'] * g_var['CreditInterest']);
}
else {
g_var['Account'] = g_var['Account'] + (g_var['Account'] * g_var['DebitInterest']);
}

//add constant factor as loaded from xml
g_var['Account'] = g_var['Account'] + g_addConstant;

//Gesamtkapital updaten
// 'CompanyValue'
x = g_var['CurrentMachineCapacity'] / g_var['MaximalMachineCapacity'];
g_var['CompanyValue'] = g_var['Account'] + (g_var['Machines50'] * (x * 8000)) + (g_var['Machines100'] * (x * 16000)) + (g_var['Distributors'] * (8000 - (g_current_round * 100))) + (g_var['MaterialStock'] * 2) + (g_var['ShirtStock'] * 20);

//Maschinenschäden
// 'MachineDamage'
g_var['MachineDamage'] = 1 - (g_var['CurrentMachineCapacity'] / g_var['MaximalMachineCapacity']);

//Produktionsausfall
// 'ProductionLoss'
g_var['ProductionLoss'] = 1 - (g_var['ProductStock'] / g_var['PossibleProduction']);
if (isNaN(g_var['ProductionLoss'])) { g_var['ProductionLoss'] = 1; } // wenn NaN dann auf 1 setzen

return g_var;
}
37 changes: 37 additions & 0 deletions Refactoring/03_tests_for_refactoring.js
@@ -0,0 +1,37 @@

var test_first_round = function () {
// Arrange
var round = 0;
var constant = 0;
var values = init(round1, 0);

// Act
var values = calcFormulas(values, values, round, constant);

// Assert
// Left
Math.round(values.Account).should.equal(168075);
Math.round(values.Sales).should.equal(347);
tolerance(values.MaterialPrice, 8.27, 0.001).should.be.true;
Math.round(values.ShirtStock).should.equal(0);
Math.round(values.Workers50).should.equal(8);
Math.round(values.Workers100).should.equal(0);
Math.round(values.Salary).should.equal(1080);
Math.round(values.ShirtPrice).should.equal(52);
Math.round(values.Distributors).should.equal(1);
tolerance(values.Satisfaction, 0.98, 0.001).should.be.true;
Math.round(values.ProductionLoss).should.equal(0.26);

// Right
Math.round(values.CompanyValue).should.equal(247077);
Math.round(values.Demand).should.equal(703);
Math.round(values.MaterialStock).should.equal(0);
Math.round(values.MaterialOrdered).should.equal(250);
Math.round(values.Machines50).should.equal(10);
Math.round(values.Machines100).should.equal(0);
Math.round(values.Service).should.equal(1200);
Math.round(values.Social).should.equal(50);
Math.round(values.Advertising).should.equal(2800);
tolerance(values.Location, 0.5, 0.000001).should.be.true;
tolerance(values.MachineDamage, 0.112, 0.01).should.be.true;
}();

0 comments on commit 71b311d

Please sign in to comment.