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

📄 gstabsearch.cpp

📁 一个非常有用的开源代码
💻 CPP
字号:
#include "GStabSearch.h"#include "GBits.h"#include <math.h>#include <stdio.h>GStabSearch::GStabSearch(GRealVectorCritic* pCritic, double dMin, double dRange): GRealVectorSearch(pCritic){	m_dMin = dMin;	m_dRange = dRange;	m_dTolerance = .00001;	m_nDimensions = pCritic->GetVectorSize();	m_pMins = new double[m_nDimensions];	m_pRanges = new double[m_nDimensions];	m_pVector = new double[m_nDimensions];	m_nMask[0] = 0;	m_nMask[1] = 0;	m_nMask[2] = 0;	m_nMask[3] = 0;	Reset();		m_nMask[0] = 0; // undo the increment that Reset() does}/*virtual*/ GStabSearch::~GStabSearch(){	delete(m_pMins);	delete(m_pRanges);	delete(m_pVector);}void GStabSearch::Reset(){	m_nCurrentDim = 0;	m_nMaskPos = 0;	// Start at the global scope	int i;	for(i = 0; i < m_nDimensions; i++)	{		m_pMins[i] = m_dMin;		m_pRanges[i] = m_dRange;	}	// Increment the mask	i = 0;	while(++m_nMask[i] == 0)		i++;}/*virtual*/ void GStabSearch::Iterate(){	// Test the center of both halves	int i;	for(i = 0; i < m_nDimensions; i++)		m_pVector[i] = m_pMins[i] + .5 * m_pRanges[i];	m_pVector[m_nCurrentDim] = m_pMins[m_nCurrentDim] + .25 * m_pRanges[m_nCurrentDim];	double dError1 = m_pCritic->Critique(m_pVector);	m_pVector[m_nCurrentDim] = m_pMins[m_nCurrentDim] + .75 * m_pRanges[m_nCurrentDim];	double dError2 = m_pCritic->Critique(m_pVector);	// If the mask bit is zero, pick the better half, otherwise pick the worse half	m_pRanges[m_nCurrentDim] *= .5;	if(m_nMask[m_nMaskPos / 32] & (1 << (m_nMaskPos % 32)))	{		if(dError2 >= dError1)			m_pMins[m_nCurrentDim] += m_pRanges[m_nCurrentDim];	}	else	{		if(dError2 < dError1)			m_pMins[m_nCurrentDim] += m_pRanges[m_nCurrentDim];	}	// Advance	if(++m_nCurrentDim >= m_nDimensions)		m_nCurrentDim = 0;	if(++m_nMaskPos >= 128)		m_nMaskPos = 127;	if(m_pRanges[m_nCurrentDim] < m_dTolerance)		Reset();}

⌨️ 快捷键说明

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