⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 random.h

📁 遗传算法做图像的模式匹配
💻 H
📖 第 1 页 / 共 2 页
字号:
		/// This method is thread-safe.</summary>
		/// <returns>Returns generate random value.</returns>
		virtual int GACALL Generate()
		{
			unsigned int w1, w2;
			_generator.Generate( w1, w2 );

			return (int)w1 < 0 ? -(int)w1 : (int)w1;
		}

		/// <summary>This method generates random values in interval(0, <c>max</c>).
		///
		/// This method is thread-safe.</summary>
		/// <param name="max">maximal value which can be generated.</param>
		/// <returns>Returns generate random value.</returns>
		virtual int GACALL Generate(const int& max) { return Generate() % max; }

		/// <summary>This method generates random values in interval(<c>min</c>, <c>max</c>).
		///
		/// This method is thread-safe.</summary>
		/// <param name="min">minimal value which can be generated.</param>
		/// <param name="max">maximal value which can be generated.</param>
		/// <returns>Returns generate random value.</returns>
		virtual int GACALL Generate(const int& min,
			const int& max) { return min + Generate( max - min ); }

	};// END CLASS DEFINITION GaRandomInteger

	/// <summary><c>GaRandomFloat</c> class generates random single  precision floating-point numbers. Targeted architecture must support IEEE 754 standard.
	/// The class implements <see cref="GaRandom" /> interface. This class has no built-in synchronizator, so <c>LOCK_OBJECT</c> and <c>LOCK_THIS_OBJECT</c>
	/// macros cannot be used with instances of this class, but all public methods are thread-safe.</summary>
	class GaRandomFloat : public GaRandom<float>
	{

	private:

		/// <summary>Instance of algorithm for generating random numbers.</summary>
		GaRandomGenerator _generator;

	public:

		/// <summary>This constructor initializes random generator with current time as seed.</summary>
		GaRandomFloat() { }

		/// <summary>This constructor initialize random generator with user-defined seed.</summary>
		/// <param name="seed">user-defined seed.</param>
		GaRandomFloat(unsigned long seed) : _generator(seed) { }

		/// <summary>This method generates random values in interval(0, 1).
		///
		/// This method is thread-safe.</summary>
		/// <returns>Returns generate random value.</returns>
		virtual float GACALL Generate() { return _generator.GenerateFloat(); }

		/// <summary>This method generates random values in interval(0, <c>max</c>).
		///
		/// This method is thread-safe.</summary>
		/// <param name="max">maximal value which can be generated.</param>
		/// <returns>Returns generate random value.</returns>
		virtual float GACALL Generate(const float& max) { return max * _generator.GenerateFloat(); }

		/// <summary>This method generates random values in interval(<c>min</c>, <c>max</c>).
		///
		/// This method is thread-safe.</summary>
		/// <param name="min">minimal value which can be generated.</param>
		/// <param name="max">maximal value which can be generated.</param>
		/// <returns>Returns generate random value.</returns>
		virtual float GACALL Generate(const float& min,
						 const float& max) { return min + ( max - min ) * _generator.GenerateFloat(); }

	};// END CLASS DEFINITION GaRandomFloat

	/// <summary><c>GaRandomDouble</c> class generates random double precision floating-point numbers. Class takes care about endianness of the architecture.
	/// Targeted architecture must support IEEE 754 standard. The class implements <see cref="GaRandom" /> interface. This class has no built-in synchronizator,
	/// so <c>LOCK_OBJECT</c> and <c>LOCK_THIS_OBJECT</c> macros cannot be used with instances of this class, but all public methods are thread-safe.</summary>
	class GaRandomDouble : public GaRandom<double>
	{

	private:

		/// <summary>Instance of algorithm for generating random numbers.</summary>
		GaRandomGenerator _generator;

	public:

		/// <summary>This constructor initializes random generator with current time as seed.</summary>
		GaRandomDouble() { }

		/// <summary>This constructor initialize random generator with user-defined seed.</summary>
		/// <param name="seed">user-defined seed.</param>
		GaRandomDouble(unsigned long seed) : _generator(seed) { }

		/// <summary>This method generates random values in interval(0, 1).
		///
		/// This method is thread-safe.</summary>
		/// <returns>Returns generate random value.</returns>
		virtual double GACALL Generate() { return _generator.GenerateDouble(); }

		/// <summary>This method generates random values in interval(0, <c>max</c>).
		///
		/// This method is thread-safe.</summary>
		/// <param name="max">maximal value which can be generated.</param>
		/// <returns>Returns generate random value.</returns>
		virtual double GACALL Generate(const double& max) { return max * _generator.GenerateDouble(); }

		/// <summary>This method generates random values in interval(<c>min</c>, <c>max</c>).
		///
		/// This method is thread-safe.</summary>
		/// <param name="min">minimal value which can be generated.</param>
		/// <param name="max">maximal value which can be generated.</param>
		/// <returns>Returns generate random value.</returns>
		virtual double GACALL Generate(const double& min,
			const double& max) { return min + ( max - min ) * _generator.GenerateDouble(); }

	};// END CLASS DEFINITION GaRandomDouble

	/// <summary><c>GaRandomBool</c> class generates random boolean values. It supports generating boolean with defined probabilities of 
	/// <c>true</c> and <c>false</c> states. The class implements <see cref="GaRandom" /> interface. This class has no built-in synchronizator,
	/// so <c>LOCK_OBJECT</c> and <c>LOCK_THIS_OBJECT</c> macros cannot be used with instances of this class, but all public methods are thread-safe.</summary>
	class GaRandomBool : public GaRandom<bool>
	{

	private:

		/// <summary>Instance of algorithm for generating random numbers.</summary>
		GaRandomGenerator _generator;

	public:

		/// <summary>This constructor initializes random generator with current time as seed.</summary>
		GaRandomBool() { }

		/// <summary>This constructor initialize random generator with user-defined seed.</summary>
		/// <param name="seed">user-defined seed.</param>
		GaRandomBool(unsigned long seed) : _generator(seed) { }

		/// <summary>This method generates random Boolean values.
		///
		/// This method is thread-safe.</summary>
		/// <returns>Returns generate random value.</returns>
		virtual bool GACALL Generate()
		{
			unsigned int w1, w2;
			_generator.Generate( w1, w2 );

			return ( w1 & 1 ) == 1;
		}

		/// <summary>This method generates random Boolean values.
		///
		/// This method is thread-safe.</summary>
		/// <param name="max">this parameter is ignored.</param>
		/// <returns>Returns generate random value.</returns>
		virtual bool GACALL Generate(const bool& max) { return Generate(); }

		/// <summary>This method generates random Boolean values.
		///
		/// This method is thread-safe.</summary>
		/// <param name="min">this parameter is ignored.</param>
		/// <param name="max">this parameter is ignored.</param>
		/// <returns>Returns generate random value.</returns>
		virtual bool GACALL Generate(const bool& min,
			const bool& max) { return Generate(); }

		// Generates boolean with p probability of TRUE and 1-p probability of FALSE
		/// <summary>This method generates Boolean value with <c>p</c> probability of <c>true</c> value.
		///
		/// This method is thread safe.</summary>
		/// <param name="p">probability of <c>true</c> value (0, 1).</param>
		/// <returns>Returns generate random value.</returns>
		inline bool GACALL Generate(double p) { return _generator.GenerateFloat() < p; }

		// Generates boolean with p probability of TRUE and 100-p probability of FALSE. p is expressed in 
		/// <summary>This method generates Boolean value with <c>p</c> probability of <c>true</c> and <c>100-p</c> of <c>false</c> value.
		///
		/// This method is thread safe.</summary>
		/// <param name="p">probability in percents of <c>true</c> value (0 - 100).</param>
		/// <returns>Returns generate random value.</returns>
		inline bool GACALL Generate(int p)
		{
			unsigned int w1, w2;
			_generator.Generate( w1, w2 );

			return (int)w1 % 100 < p;
		}

	};// END CLASS DEFINITION GaRandomBool

} // Common

#endif // __GA_RANDOM_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -