// File: /workspace/github_cpp_makefile_star2_O2/richardposner[P]BioNetFit2/src/code/Swarm.cpp
// Function: Swarm::Swarm()
Swarm::Swarm() {

	// Whether or not we are master
	isMaster = false;
	resumingSavedSwarm = false;
	swarmComm = 0;
	fitCompareTolerance = 1e-6;
	bootstrapCounter = 0;
	commInit = false;
	verbose = false;  //razi added for debugging

	options.jobName = "";
	options.fitType = "";
	options.outputDir = "";
	options.bngCommand = "";
	options.outputEvery = 100;

	options.models.clear();
	options.defaultModel = -1;
	sConf_.clear();

	options.synchronicity = 0;
	options.maxGenerations = 0;
	options.swarmSize = 0;
	options.minFit = 0;
	options.bootstrap = 0;
	options.parallelCount = 0;
	options.seed = 0;

	options.useCluster = false;
	options.saveClusterOutput = false;
	options.emailWhenFinished = false;
	options.emailAddress = "";

	options.usePipes = false;
	options.divideByInit = false;
	options.logTransformSimData = false;
	options.standardizeSimData = false;
	options.standardizeExpData = false;

	options.deleteOldFiles = true;
	options.objFunc = 1;
	options.extraWeight = 0;
	options.swapRate = 0.5;
	options.forceDifferentParents = true;
	options.maxRetryDifferentParents = 100;
	options.smoothing = 1;
	options.keepParents = 0;

	//options.maxFitTime = MAX_LONG;
	options.maxFitTime = std::string("700:00:00");
	options.maxNumSimulations = MAX_LONG;

	// PSO options
	options.inertia = 0.72; // 0.72
	options.cognitive = 1.49; // 1.49
	options.social = 1.49; // 1.49
	options.nmax = 0; // 20
	options.nmin = 80; // 80
	options.inertiaInit = 1; // 1
	options.inertiaFinal = 0.1; // 0.1
	options.absTolerance = 10e-4; // 10E-4
	options.relTolerance = 10e-4; // 10E-4
	options.mutateQPSO = false;
	options.betaMin = 0.5;
	options.betaMax = 1.0;

	options.topology = "fullyconnected"; // fullyconnected
	options.psoType = "pso"; // pso

	options.enhancedStop = false; // true
	options.enhancedInertia = false; // true

	options.numIslands = 0;

	options.minTemp = pow(10, -10);
	options.minRadius = pow(10, -6);
	options.localSearchProbability = 0.01;
	options.randParamsProbability = 0.1;

	options.verbosity = 1;
	hasMutate = false;

	currentGeneration = 0;

	/*
	std::map<int, double> particleBestFits_;
	std::map<int, std::vector<double> > particleBestParamSets_;
	std::map<int, std::vector<double> > particleCurrParamSets_;
	std::map<int, double> particleWeights_;
	std::map<double, int> particleBestFitsByFit_;
	 */

	permanenceCounter_ = 0; // 0
	flightCounter_ = 0; // 0
	weightedAvgPos_ = 0; // 0
	optimum_ = 0; // 0
	inertiaUpdateCounter_ = 0; // 0;
	beta_ = 0.7;
	cauchyMutator_ = 0.2;

	auto seed = chrono::high_resolution_clock::now().time_since_epoch().count();
	generalRand.seed(seed);
	generalRand.discard(700000);

	/*
	if (options.seed) {
		generalRand.seed(options.seed);
		generalRand.discard(700000);

		srand(options.seed);
	}
	else {
		// TODO: Make sure everything is being seeded properly and in the proper place. Also let's do away with rand()
		// Seed our random number engine
		auto seed = chrono::high_resolution_clock::now().time_since_epoch().count();
		generalRand.seed(seed);
		generalRand.discard(700000);

		srand (std::tr1::random_device{}());
	}
	 */

}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x138, %rsp            # imm = 0x138
movq %rdi, %rbx
andl $0x0, 0x10(%rdi)
andq $0x0, 0x18(%rdi)
leaq 0x10(%rdi), %rax
movq %rax, 0x20(%rdi)
movq %rax, 0x28(%rdi)
leaq 0x58(%rdi), %r15
xorps %xmm0, %xmm0
movups %xmm0, 0x30(%rdi)
movups %xmm0, 0x40(%rdi)
movq %r15, %rdi
callq 0x8be76
leaq 0xa20(%rbx), %rdi
callq 0x8be76
leaq 0x1408(%rbx), %rax
andl $0x0, 0x1408(%rbx)
andq $0x0, 0x1410(%rbx)
movq %rax, 0x1418(%rbx)
movq %rax, 0x1420(%rbx)
andq $0x0, 0x1428(%rbx)
leaq 0x1438(%rbx), %rax
andl $0x0, 0x1438(%rbx)
andq $0x0, 0x1440(%rbx)
movq %rax, 0x1448(%rbx)
movq %rax, 0x1450(%rbx)
andq $0x0, 0x1458(%rbx)
leaq 0x1468(%rbx), %rax
andl $0x0, 0x1468(%rbx)
andq $0x0, 0x1470(%rbx)
movq %rax, 0x1478(%rbx)
movq %rax, 0x1480(%rbx)
andq $0x0, 0x1488(%rbx)
andl $0x0, 0x1498(%rbx)
andq $0x0, 0x14a0(%rbx)
leaq 0x1498(%rbx), %rax
movq %rax, 0x14a8(%rbx)
movq %rax, 0x14b0(%rbx)
andq $0x0, 0x14b8(%rbx)
leaq 0x14c0(%rbx), %r14
movq %r14, %rdi
callq 0x85a1a
leaq 0x17f0(%rbx), %rax
movq %rax, 0x17e0(%rbx)
andq $0x0, 0x17e8(%rbx)
xorl %ebp, %ebp
movb %bpl, 0x17f0(%rbx)
leaq 0x1810(%rbx), %rax
movq %rax, 0x1800(%rbx)
andq $0x0, 0x1808(%rbx)
movb %bpl, 0x1810(%rbx)
leaq 0x1828(%rbx), %rax
andl $0x0, 0x1828(%rbx)
andq $0x0, 0x1830(%rbx)
movq %rax, 0x1838(%rbx)
movq %rax, 0x1840(%rbx)
andl $0x0, 0x1860(%rbx)
andq $0x0, 0x1868(%rbx)
leaq 0x1860(%rbx), %rax
xorps %xmm0, %xmm0
movups %xmm0, 0x1848(%rbx)
movq %rax, 0x1870(%rbx)
movq %rax, 0x1878(%rbx)
andl $0x0, 0x1898(%rbx)
andq $0x0, 0x18a0(%rbx)
leaq 0x1898(%rbx), %rax
movups %xmm0, 0x1880(%rbx)
movq %rax, 0x18a8(%rbx)
movq %rax, 0x18b0(%rbx)
andq $0x0, 0x18b8(%rbx)
leaq 0x18c8(%rbx), %rax
andl $0x0, 0x18c8(%rbx)
andq $0x0, 0x18d0(%rbx)
movq %rax, 0x18d8(%rbx)
movq %rax, 0x18e0(%rbx)
andl $0x0, 0x1910(%rbx)
andq $0x0, 0x1918(%rbx)
leaq 0x1910(%rbx), %rax
movups %xmm0, 0x18f8(%rbx)
movups %xmm0, 0x18e8(%rbx)
movq %rax, 0x1920(%rbx)
movq %rax, 0x1928(%rbx)
andl $0x0, 0x1958(%rbx)
andq $0x0, 0x1960(%rbx)
leaq 0x1958(%rbx), %rax
movups %xmm0, 0x1930(%rbx)
movups %xmm0, 0x1940(%rbx)
movq %rax, 0x1968(%rbx)
movq %rax, 0x1970(%rbx)
andl $0x0, 0x19a0(%rbx)
andq $0x0, 0x19a8(%rbx)
leaq 0x19a0(%rbx), %rax
movups %xmm0, 0x1978(%rbx)
movups %xmm0, 0x1988(%rbx)
movq %rax, 0x19b0(%rbx)
movq %rax, 0x19b8(%rbx)
andl $0x0, 0x19d8(%rbx)
andq $0x0, 0x19e0(%rbx)
leaq 0x19d8(%rbx), %rax
movups %xmm0, 0x19c0(%rbx)
movq %rax, 0x19e8(%rbx)
movq %rax, 0x19f0(%rbx)
andl $0x0, 0x1a28(%rbx)
andq $0x0, 0x1a30(%rbx)
leaq 0x1a28(%rbx), %rax
movups %xmm0, 0x1a08(%rbx)
movups %xmm0, 0x19f8(%rbx)
andq $0x0, 0x1a18(%rbx)
movq %rax, 0x1a38(%rbx)
movq %rax, 0x1a40(%rbx)
andq $0x0, 0x1a48(%rbx)
leaq 0x1a58(%rbx), %rax
andl $0x0, 0x1a58(%rbx)
andq $0x0, 0x1a60(%rbx)
movq %rax, 0x1a68(%rbx)
movq %rax, 0x1a70(%rbx)
andq $0x0, 0x1a78(%rbx)
leaq 0x1a88(%rbx), %rax
andl $0x0, 0x1a88(%rbx)
andq $0x0, 0x1a90(%rbx)
movq %rax, 0x1a98(%rbx)
movq %rax, 0x1aa0(%rbx)
andq $0x0, 0x1aa8(%rbx)
leaq 0x1ab8(%rbx), %rax
andl $0x0, 0x1ab8(%rbx)
andq $0x0, 0x1ac0(%rbx)
movq %rax, 0x1ac8(%rbx)
movq %rax, 0x1ad0(%rbx)
andq $0x0, 0x1ad8(%rbx)
leaq 0x1ae8(%rbx), %rax
andl $0x0, 0x1ae8(%rbx)
andq $0x0, 0x1af0(%rbx)
movq %rax, 0x1af8(%rbx)
movq %rax, 0x1b00(%rbx)
andq $0x0, 0x1b08(%rbx)
leaq 0x1b18(%rbx), %rax
andl $0x0, 0x1b18(%rbx)
andq $0x0, 0x1b20(%rbx)
movq %rax, 0x1b28(%rbx)
movq %rax, 0x1b30(%rbx)
andq $0x0, 0x1b38(%rbx)
leaq 0x1b48(%rbx), %rax
andl $0x0, 0x1b48(%rbx)
andq $0x0, 0x1b50(%rbx)
movq %rax, 0x1b58(%rbx)
movq %rax, 0x1b60(%rbx)
andq $0x0, 0x1b68(%rbx)
leaq 0x1b78(%rbx), %rax
andl $0x0, 0x1b78(%rbx)
andq $0x0, 0x1b80(%rbx)
movq %rax, 0x1b88(%rbx)
movq %rax, 0x1b90(%rbx)
andq $0x0, 0x1b98(%rbx)
leaq 0x1ba8(%rbx), %rax
andl $0x0, 0x1ba8(%rbx)
andq $0x0, 0x1bb0(%rbx)
movq %rax, 0x1bb8(%rbx)
movq %rax, 0x1bc0(%rbx)
andq $0x0, 0x1bc8(%rbx)
leaq 0x1bd8(%rbx), %rax
andl $0x0, 0x1bd8(%rbx)
andq $0x0, 0x1be0(%rbx)
movq %rax, 0x1be8(%rbx)
movq %rax, 0x1bf0(%rbx)
andq $0x0, 0x1bf8(%rbx)
leaq 0x1c08(%rbx), %rax
andl $0x0, 0x1c08(%rbx)
andq $0x0, 0x1c10(%rbx)
movq %rax, 0x1c18(%rbx)
movq %rax, 0x1c20(%rbx)
andq $0x0, 0x1c28(%rbx)
leaq 0x1c38(%rbx), %rax
andl $0x0, 0x1c38(%rbx)
andq $0x0, 0x1c40(%rbx)
movq %rax, 0x1c48(%rbx)
movq %rax, 0x1c50(%rbx)
andq $0x0, 0x1c58(%rbx)
leaq 0x1c68(%rbx), %rax
andl $0x0, 0x1c68(%rbx)
andq $0x0, 0x1c70(%rbx)
movq %rax, 0x1c78(%rbx)
movq %rax, 0x1c80(%rbx)
andq $0x0, 0x1c88(%rbx)
leaq 0x1c98(%rbx), %rax
andl $0x0, 0x1c98(%rbx)
andq $0x0, 0x1ca0(%rbx)
movq %rax, 0x1ca8(%rbx)
movq %rax, 0x1cb0(%rbx)
andq $0x0, 0x1cb8(%rbx)
leaq 0x1cc8(%rbx), %rax
andl $0x0, 0x1cc8(%rbx)
andq $0x0, 0x1cd0(%rbx)
movq %rax, 0x1cd8(%rbx)
movq %rax, 0x1ce0(%rbx)
andq $0x0, 0x1ce8(%rbx)
leaq 0x1cf8(%rbx), %rax
andl $0x0, 0x1cf8(%rbx)
andq $0x0, 0x1d00(%rbx)
movq %rax, 0x1d08(%rbx)
movq %rax, 0x1d10(%rbx)
andl $0x0, 0x1d58(%rbx)
leaq 0x1938(%rbx), %r12
andq $0x0, 0x1d60(%rbx)
leaq 0x1d58(%rbx), %rax
movups %xmm0, 0x1d38(%rbx)
movups %xmm0, 0x1d28(%rbx)
movups %xmm0, 0x1d18(%rbx)
andq $0x0, 0x1d48(%rbx)
movq %rax, 0x1d68(%rbx)
movq %rax, 0x1d70(%rbx)
andq $0x0, 0x1d78(%rbx)
callq 0x280b0
movq %rax, 0x1db0(%rbx)
callq 0x280b0
movq %rax, 0x1db8(%rbx)
movb %bpl, 0x50(%rbx)
movb %bpl, 0x13f0(%rbx)
andq $0x0, (%rbx)
movl $0x358637bd, 0x13f4(%rbx) # imm = 0x358637BD
andl $0x0, 0x13ec(%rbx)
andw $0x0, 0x13f8(%rbx)
leaq 0x6af4b(%rip), %rsi     # 0xd4c01
movq %r14, %rdi
callq 0x29490
leaq 0x14e0(%rbx), %rdi
leaq 0x6af35(%rip), %rsi     # 0xd4c01
callq 0x29490
leaq 0x1500(%rbx), %rdi
leaq 0x6af22(%rip), %rsi     # 0xd4c01
callq 0x29490
leaq 0x1540(%rbx), %rdi
leaq 0x6af0f(%rip), %rsi     # 0xd4c01
callq 0x29490
movl $0x64, 0x1728(%rbx)
movq 0x15c0(%rbx), %rax
cmpq %rax, 0x15c8(%rbx)
je 0x69d18
movq %rax, 0x15c8(%rbx)
orl $-0x1, 0x15d8(%rbx)
movq %r12, %rdi
callq 0x3376e
xorl %eax, %eax
movb %al, 0x1618(%rbx)
andq $0x0, 0x1634(%rbx)
movb %al, 0x1631(%rbx)
movb %al, 0x1770(%rbx)
movb %al, 0x1798(%rbx)
leaq 0x17a0(%rbx), %rdi
xorps %xmm0, %xmm0
movups %xmm0, 0x161c(%rbx)
leaq 0x6aea0(%rip), %rsi     # 0xd4c01
callq 0x29490
xorl %eax, %eax
movb %al, 0x1630(%rbx)
movb %al, 0x163c(%rbx)
andl $0x0, 0x1640(%rbx)
andw $0x0, 0x1644(%rbx)
movb $0x1, %al
movb %al, 0x1646(%rbx)
movl $0x1, 0x162c(%rbx)
movabsq $0x3f00000000000000, %rcx # imm = 0x3F00000000000000
movq %rcx, 0x1648(%rbx)
movb %al, 0x1650(%rbx)
movabsq $0x100000064, %rax      # imm = 0x100000064
movq %rax, 0x1654(%rbx)
andl $0x0, 0x165c(%rbx)
leaq 0x72799(%rip), %rsi     # 0xdc564
leaq 0x118(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x33402
leaq 0x1660(%rbx), %rdi
leaq 0x118(%rsp), %r13
movq %r13, %rsi
callq 0x28c40
movq %r13, %rdi
callq 0x295a0
movabsq $0x7fffffffffffffff, %rax # imm = 0x7FFFFFFFFFFFFFFF
movq %rax, 0x1680(%rbx)
movsd 0x722cb(%rip), %xmm0    # 0xdc0e0
movsd %xmm0, 0x1688(%rbx)
movq $0x3fbeb852, 0x1690(%rbx) # imm = 0x3FBEB852
movl $0x50, 0x1698(%rbx)
movaps 0x722b7(%rip), %xmm0    # 0xdc0f0
movups %xmm0, 0x169c(%rbx)
movb $0x0, 0x16ac(%rbx)
movsd 0x722b1(%rip), %xmm0    # 0xdc100
movsd %xmm0, 0x16b0(%rbx)
leaq 0x16b8(%rbx), %rdi
leaq 0x72709(%rip), %rsi     # 0xdc56e
callq 0x29490
leaq 0x16d8(%rbx), %rdi
leaq 0x7325a(%rip), %rsi     # 0xdd0d2
callq 0x29490
andw $0x0, 0x16f8(%rbx)
andl $0x0, 0x16fc(%rbx)
movaps 0x7227d(%rip), %xmm0    # 0xdc110
movups %xmm0, 0x1710(%rbx)
movsd 0x7227e(%rip), %xmm0    # 0xdc120
movsd %xmm0, 0x1720(%rbx)
movl $0x1, 0x1614(%rbx)
movb $0x0, 0x13f1(%rbx)
andl $0x0, 0x13e8(%rbx)
xorps %xmm0, %xmm0
movups %xmm0, 0x1d80(%rbx)
movups %xmm0, 0x1d8c(%rbx)
movaps 0x72256(%rip), %xmm0    # 0xdc130
movups %xmm0, 0x1da0(%rbx)
callq 0x280b0
leaq 0x118(%rsp), %rsi
movl %eax, (%rsi)
movq %r15, %rdi
callq 0x85bec
movl $0xaae60, %esi          # imm = 0xAAE60
movq %r15, %rdi
callq 0x85c22
addq $0x138, %rsp            # imm = 0x138
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x69f27
jmp 0x69f27
jmp 0x69f27
movq %rax, 0x10(%rsp)
jmp 0x6a2a7
movq %rax, 0x10(%rsp)
leaq 0x1400(%rbx), %rax
movq %rax, 0x110(%rsp)
leaq 0x1430(%rbx), %rax
movq %rax, 0x108(%rsp)
leaq 0x1460(%rbx), %rax
movq %rax, 0x100(%rsp)
leaq 0x1490(%rbx), %rax
movq %rax, 0xf8(%rsp)
leaq 0x17e0(%rbx), %rax
movq %rax, 0xf0(%rsp)
leaq 0x1800(%rbx), %rax
movq %rax, 0xe8(%rsp)
leaq 0x1820(%rbx), %rax
movq %rax, 0xe0(%rsp)
leaq 0x1858(%rbx), %rax
movq %rax, 0xd8(%rsp)
leaq 0x1890(%rbx), %rax
movq %rax, 0xd0(%rsp)
leaq 0x18c0(%rbx), %rax
movq %rax, 0xc8(%rsp)
leaq 0x18f0(%rbx), %rax
movq %rax, 0xc0(%rsp)
leaq 0x1908(%rbx), %rax
movq %rax, 0xb8(%rsp)
leaq 0x1950(%rbx), %rax
movq %rax, 0xb0(%rsp)
leaq 0x1980(%rbx), %rax
movq %rax, 0xa8(%rsp)
leaq 0x1998(%rbx), %rax
movq %rax, 0xa0(%rsp)
leaq 0x19d0(%rbx), %rax
movq %rax, 0x98(%rsp)
leaq 0x1a08(%rbx), %rax
movq %rax, 0x90(%rsp)
leaq 0x1a20(%rbx), %rax
movq %rax, 0x88(%rsp)
leaq 0x1a50(%rbx), %rax
movq %rax, 0x80(%rsp)
leaq 0x1a80(%rbx), %rax
movq %rax, 0x78(%rsp)
leaq 0x1ab0(%rbx), %rax
movq %rax, 0x70(%rsp)
leaq 0x1ae0(%rbx), %rax
movq %rax, 0x68(%rsp)
leaq 0x1b10(%rbx), %rax
movq %rax, 0x60(%rsp)
leaq 0x1b40(%rbx), %rax
movq %rax, 0x58(%rsp)
leaq 0x1b70(%rbx), %rax
movq %rax, 0x50(%rsp)
leaq 0x1ba0(%rbx), %rax
movq %rax, 0x48(%rsp)
leaq 0x1bd0(%rbx), %rax
movq %rax, 0x40(%rsp)
leaq 0x1c00(%rbx), %rax
movq %rax, 0x38(%rsp)
leaq 0x1c30(%rbx), %rax
movq %rax, 0x30(%rsp)
leaq 0x1c60(%rbx), %rax
movq %rax, 0x28(%rsp)
leaq 0x1c90(%rbx), %rax
movq %rax, 0x20(%rsp)
leaq 0x1cc0(%rbx), %rax
movq %rax, 0x18(%rsp)
leaq 0x1cf0(%rbx), %r13
leaq 0x1d20(%rbx), %r15
leaq 0x1d38(%rbx), %rbp
leaq 0x1d50(%rbx), %rdi
callq 0x66268
movq %rbp, %rdi
callq 0x85c60
movq %r15, %rdi
callq 0x5b268
movq %r13, %rdi
callq 0x8a5de
movq 0x18(%rsp), %rdi
callq 0x66268
movq 0x20(%rsp), %rdi
callq 0x66268
movq 0x28(%rsp), %rdi
callq 0x45f7c
movq 0x30(%rsp), %rdi
callq 0x45f7c
movq 0x38(%rsp), %rdi
callq 0x45f7c
movq 0x40(%rsp), %rdi
callq 0x45f7c
movq 0x48(%rsp), %rdi
callq 0x45f7c
movq 0x50(%rsp), %rdi
callq 0x45f7c
movq 0x58(%rsp), %rdi
callq 0x45f7c
movq 0x60(%rsp), %rdi
callq 0x45f7c
movq 0x68(%rsp), %rdi
callq 0x45f7c
movq 0x70(%rsp), %rdi
callq 0x45f7c
movq 0x78(%rsp), %rdi
callq 0x8a5de
movq 0x80(%rsp), %rdi
callq 0x8a5de
movq 0x88(%rsp), %rdi
callq 0x8a5de
movq 0x90(%rsp), %rdi
callq 0x85c60
movq 0x98(%rsp), %rdi
callq 0x8a636
movq 0xa0(%rsp), %rdi
callq 0x8a636
movq 0xa8(%rsp), %rdi
callq 0x85c82
movq 0xb0(%rsp), %rdi
callq 0x8a68e
movq %r12, %rdi
callq 0x3355a
movq 0xb8(%rsp), %rdi
callq 0x8a6f2
movq 0xc0(%rsp), %rdi
callq 0x8be82
movq 0xc8(%rsp), %rdi
callq 0x8a636
movq 0xd0(%rsp), %rdi
callq 0x8a636
movq 0xd8(%rsp), %rdi
callq 0x8a636
movq 0xe0(%rsp), %rdi
callq 0x8a636
movq 0xe8(%rsp), %rdi
callq 0x295a0
movq 0xf0(%rsp), %rdi
callq 0x295a0
movq %r14, %rdi
callq 0x85ca4
movq 0xf8(%rsp), %rdi
callq 0x8a786
movq 0x100(%rsp), %rdi
callq 0x8a786
movq 0x108(%rsp), %rdi
callq 0x66268
movq 0x110(%rsp), %rdi
callq 0x66268
leaq 0x38(%rbx), %rdi
addq $0x8, %rbx
callq 0x33714
movq %rbx, %rdi
callq 0x8a7d0
movq 0x10(%rsp), %rdi
callq 0x292f0