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

📄 isa.cpp

📁 一个模拟退火算法的改进程序
💻 CPP
📖 第 1 页 / 共 4 页
字号:
39.647434, 38.760994, 38.941170, 39.140553, 39.869812, 40.827415, 
56.098412, 57.265591, 58.451645, 59.673508, 60.253437, 60.985992, 
32.541389, 32.175434, 32.452503, 36.557224, 59.276855, 65.867867, 
42.135281, 44.113327, 59.374249, 67.391022, 70.063057, 71.771996, 
25.582716, 26.132494, 28.221998, 30.686630, 32.147362, 33.002293, 
69.055222, 70.507874, 71.499229, 72.746384, 73.410744, 73.887932, 
48.718025, 47.532242, 46.045387, 44.645142, 41.717686, 37.887100, 
62.168484, 61.233868, 59.110775, 57.336044, 52.981091, 47.703876, 
56.996231, 48.142223, 37.049068, 32.069519, 31.478189, 30.912769, 
75.381119, 75.472733, 75.197456, 74.903839, 74.998299, 75.095528, 
39.208248, 46.830154, 51.553436, 54.306450, 55.349491, 56.114876, 
51.943317, 52.292503, 64.056519, 69.353638, 70.283295, 71.072830, 
40.505486, 35.231083, 34.181683, 33.710152, 33.432659, 33.069767, 
62.944603, 64.108253, 65.130707, 66.179268, 66.241180, 66.292885, 
39.065357, 38.096779, 37.796223, 37.545856, 39.356842, 62.125229, 
56.129730, 54.230358, 51.984962, 50.042957, 48.829712, 48.202518, 
28.737541, 30.962187, 35.874020, 41.234127, 45.102612, 48.694073, 
59.603745, 56.080017, 54.274258, 54.430183, 57.234001, 61.689487, 
27.100470, 27.391628, 28.860472, 29.586695, 32.214294, 49.646168, 
42.578938, 42.707523, 46.499107, 61.546795, 66.302330, 69.435471, 
24.704388, 23.817375, 24.046761, 24.339071, 25.794577, 27.424465, 
73.321091, 72.934540, 71.652267, 70.359489, 68.717056, 66.875145, 
60.156940, 58.365196, 55.221836, 51.438900, 43.486507, 35.680210, 
69.888580, 68.089386, 64.125175, 58.458385, 49.244770, 42.040192, 
49.545406, 47.609200, 44.852962, 41.111610, 36.726032, 33.787960, 
67.857460, 66.812584, 64.708801, 62.422665, 59.438080, 56.051315, 
29.205547, 30.241322, 51.359497, 57.714642, 59.813580, 62.286613, 
39.172031, 62.784195, 72.729218, 74.899582, 75.101471, 74.625610, 
39.345543, 30.734879, 28.198812, 27.673058, 28.262657, 29.271502, 
64.181732, 64.110657, 64.177513, 64.198502, 62.862377, 61.353882, 
49.247684, 45.982567, 42.984966, 41.864433, 45.736561, 53.809952, 
45.845943, 49.866535, 53.184002, 55.621735, 56.126793, 56.720921, 
47.669838, 43.757298, 37.441799, 31.201229, 31.328125, 42.522282, 
56.797291, 56.647835, 56.147968, 56.182575, 61.241802, 68.324799, 
25.885382, 25.266989, 26.266413, 29.911463, 48.237133, 55.800972, 
33.267662, 35.935478, 58.117008, 64.829880, 65.837509, 66.013435, 
31.411585, 29.968023, 28.945412, 27.730225, 25.888927, 24.555252,
65.282539, 66.253296, 67.015106, 67.718575, 68.268463, 68.910324, 
58.181709, 52.531116, 45.059658, 41.518814, 43.613926, 48.723129, 
66.725960, 61.398178, 54.397526, 49.747463, 49.198914, 51.182693, 
45.813328, 39.484116, 37.132645, 36.125355, 35.372692, 34.431362, 
68.615326, 63.672047, 56.815689, 52.325283, 55.817215, 62.483337, 
31.296478, 42.914101, 48.889244, 51.949879, 54.820854, 57.157787, 
52.505817, 52.505344, 56.267231, 60.721333, 62.469940, 64.262184, 
33.435272, 32.282433, 32.086212, 32.000500, 32.671661, 33.762459, 
58.656891, 58.056892, 58.819580, 68.911041, 73.448387, 75.363182, 
35.614555, 35.200199, 36.968960, 40.057529, 45.163555, 49.660789, 
53.838459, 51.832664, 49.989349, 48.216988, 45.626396, 43.095383, 
34.457195, 33.950645, 34.269539, 34.803413, 36.763100, 39.758183, 
56.372822, 55.345272, 54.272526, 53.359196, 52.152298, 51.039448, 
27.531933, 27.006523, 28.622620, 31.198097, 36.599487, 40.651020, 
42.414234, 42.185001, 42.217133, 43.486980, 51.835091, 60.074238, 
23.639551, 22.836199, 22.911375, 22.986547, 23.293180, 23.700720, 
67.668297, 68.366440, 69.131081, 69.877518, 70.247528, 70.614265, 
60.928158, 57.548393, 48.826794, 41.315224, 39.400116, 39.224403, 
66.256111, 65.317680, 63.021000, 61.009293, 56.424549, 47.857880, 
55.855270, 52.779793, 47.605247, 39.880711, 33.758202, 32.264690, 
69.794441, 69.010628, 67.119583, 65.149765, 61.983784, 58.478523, 
29.877203, 29.768606, 32.459286, 49.566021, 58.325737, 61.957420, 
56.146107, 58.606976, 66.362129, 70.163307, 71.471375, 72.648071, 
44.872620, 36.178070, 29.009380, 27.268270, 26.935045, 26.783087, 
61.207169, 61.823627, 62.612675, 63.350975, 63.823631, 64.269852, 
38.927948, 41.114468, 43.522717, 46.293316, 47.920307, 49.854725, 
51.320835, 50.337139, 49.164543, 47.947269, 49.591595, 61.330631, 
36.227554, 37.267441, 39.079945, 39.881092, 37.040070, 35.030758, 
51.085484, 53.877502, 55.835861, 57.359768, 57.680626, 58.208893, 
26.894844, 26.080000, 29.663668, 38.701942, 53.231190, 58.369675, 
34.521591, 52.842365, 61.714451, 64.067131, 64.757278, 65.810097, 
27.026386, 26.530333, 26.430269, 26.352198, 26.184418, 26.114687, 
63.972549, 67.855560, 69.891846, 71.764351, 72.309532, 72.795731, 
45.149158, 43.770172, 41.837166, 40.267738, 39.735607, 39.100258, 
58.875278, 57.556004, 55.501099, 53.622044, 50.823872, 47.078526, 
50.485939, 46.381718, 37.689960, 29.847857, 26.422848, 24.876884, 
59.789768, 59.567284, 59.284214, 58.984970, 58.017864, 57.095562, 
41.429810, 43.976082, 47.014053, 50.399490, 51.843700, 53.452488, 
46.782955, 50.502892, 58.655106, 63.725922, 66.094688, 68.184631, 
34.162880, 34.046783, 33.842915, 32.995327, 30.022175, 27.718697, 
58.956757, 59.689411, 60.697815, 61.749481, 62.277203, 62.836922, 
33.734638, 32.014286, 31.167442, 32.631802, 47.028961, 55.942871, 
50.632099, 50.057766, 49.455719, 49.014084, 48.395786, 47.998089, 
25.272448, 26.346659, 31.433893, 38.279419, 42.759121, 46.711502, 
53.823658, 53.234577, 53.260067, 53.412479, 54.081684, 55.209126, 
33.613049, 28.633829, 26.062918, 25.187447, 29.228275, 36.986927, 
41.628700, 40.390381, 43.459518, 55.166557, 60.108841, 63.855824, 
21.089224, 20.484560, 21.044039, 21.634182, 23.506865, 25.772820, 
69.176346, 68.281868, 66.741623, 65.438507, 65.970253, 67.161461, 
53.369781, 51.400700, 49.685795, 47.246235, 39.354465, 31.853041, 
63.349293, 61.664047, 58.807240, 56.812656, 50.404041, 39.729244, 
46.901203, 45.349098, 42.557941, 38.913258, 31.835720, 27.674559, 
63.720535, 61.964352, 59.462391, 56.895462, 55.355854, 53.863182, 
27.095095, 29.660772, 39.817093, 47.601803, 50.428905, 53.411743, 
44.516670, 58.388889, 63.524197, 65.088860, 65.063484, 64.800697, 
37.319935, 32.015865, 26.518044, 23.407333, 23.094036, 23.260792, 
62.548115, 61.875668, 60.814911, 59.769176, 59.030266, 58.411160, 
37.372692, 40.863232, 49.482800, 49.162582, 39.811832, 33.341942, 
47.544708, 49.888531, 51.188622, 52.176895, 51.651566, 50.969135, 
42.586380, 35.758331, 29.665880, 28.991011, 33.644016, 41.250126, 
50.662853, 49.017979, 48.954079, 58.715080, 64.308548, 67.379364, 
23.760584, 22.277967, 24.963284, 29.635550, 38.716541, 46.741943, 
30.098206, 41.980347, 50.195648, 56.569061, 62.559212, 66.328613, 
30.172644, 26.123903, 23.810966, 22.418844, 22.009727, 21.664106, 
55.856991, 62.119560, 64.850906, 66.431183, 66.411301, 66.506851, 
55.577873, 50.762405, 42.120644, 36.307308, 35.805870, 37.050991, 
58.845463, 56.243477, 52.602287, 49.052742, 46.056770, 43.221336, 
39.033607, 38.469395, 35.733345, 31.836475, 28.972008, 27.141273, 
57.992729, 57.536976, 56.729862, 56.033676, 54.768150, 53.441296, 
32.115356, 35.834496, 40.038891, 44.358440, 48.191753, 51.852276, 
44.013981, 45.895420, 53.048813, 58.737057, 61.497623, 63.636013, 
30.219889, 29.975567, 30.211178, 30.532249, 29.221239, 28.272736, 
56.795086, 57.935947, 60.266613, 62.981785, 64.338074, 65.651001, 
33.334896, 34.389030, 36.672932, 39.512783, 40.964054, 42.605682, 
47.600346, 46.239918, 44.668194, 43.102600, 43.089481, 44.357540, 
28.433762, 29.019360, 33.668175, 36.238064, 33.396027, 32.823231, 
52.387657, 53.135071, 53.822685, 54.147705, 52.199329, 49.779823, 
22.128824, 21.720842, 23.155708, 25.419979, 31.055321, 40.258072, 
38.499886, 36.868240, 39.613865, 47.629208, 52.772152, 56.228870, 
21.348761, 20.357340, 20.329277, 20.301203, 20.558020, 20.974857
};
//
//随机数产生器
//
int random()
{
	int r;
	r = (int)(rand()*1.0/32767*CB_SIZE);
    return r;
}

//
//失真函数计算程序
//
float distortion(float cb[CB_SIZE][CB_ORDER], float cb_percent[CB_SIZE])
{
	//
	//定义变量
	//
	float D_cb;                                //失真变量
	float D1;                                  //失真变量
	int C_bit[CB_BIT];                         //二进制码序号
	int C_bit_error_1bit[CB_BIT];              //二进制码序号错1bit
	int C_index;                               //码序号
	int C_index_error_1bit;                    //错1bit的码序号
	int i;
	int j;
	int k;

	//
	//变量初始化
	//
    D_cb = 0;
	//计算失真
	for(i = 0; i < CB_SIZE; i++)
	{
		//将10进制码序号转变成2进制码序号
		C_index = i;
		for(j = 0; j < CB_BIT; j++)
		{
			C_bit[CB_BIT-1-j] = C_index>>(CB_BIT-1-j);
     		C_index = C_index - (C_bit[CB_BIT-1-j]<<(CB_BIT-1-j)); 
		}

		//查找与当前码序号1比特误码的码序号
		for(j = 0; j < CB_BIT; j++)
		{
            //1比特误码
			for(k = 0; k < CB_BIT; k++)
			{
				C_bit_error_1bit[k] = C_bit[k];
			}
			if(1 == C_bit_error_1bit[j])
			{
				C_bit_error_1bit[j] = 0;
			}
			else
			{
				C_bit_error_1bit[j] = 1;
			}
			//计算错1bit的10进制码序号
			C_index_error_1bit = 0;
			for(k = 0; k < CB_BIT; k++)
			{
				C_index_error_1bit += (C_bit_error_1bit[k]<<k);
			}

			//计算1比特误码的码序号与原码序列的失真
			D1 = 0;
			for(k = 0; k < CB_ORDER; k++)
			{
				D1 += (cb[i][k] - cb[C_index_error_1bit][k])*
					   (cb[i][k] - cb[C_index_error_1bit][k]);			
			}
		}

		//将当前码矢量的失真乘以当前码矢量的先验概率
		D_cb += cb_percent[i]*D1;	
	}

	//返回总失真
	return D_cb; 
}
//
//计算初始的t值
//
float inti_t(float* codebook_SA,float p,int m)
{
	int m1=0;					//目标函数减少变换数
	int m2=0;					//目标函数增大变换数
	float f=0;				//目标函数增大变换的平均增量
	float t0;				//初始温度值
	int rand1;
	int rand2;
	float CB_temp[CB_ORDER];
	float CB_percent_temp;
	float D_cb1;             //当前最小的失真量
	float D_cb2;             //扰动后的失真量
	int i;
	int j;
	int k;                   //flag

	//计算当前码序列的失真量
	D_cb1 = distortion(codebook, CB_percent);
	//产生一个m个尝试的序列
	for(i = 0; i < m; i++)
	{
		//随机产生两个交换的序号
		rand1 = random();
		rand2 = random();

		//交换序号所对应的矢量
		for(j = 0; j < CB_ORDER; j++)
		{
			CB_temp[j] = codebook[rand1][j];
			codebook[rand1][j] = codebook[rand2][j];
			codebook[rand2][j] = CB_temp[j];
		}

		//交换序号所对应矢量先验概率
		CB_percent_temp = CB_percent[rand1];
		CB_percent[rand1] = CB_percent[rand2];
		CB_percent[rand2] = CB_percent_temp;

		//计算新的失真量
		D_cb2 = distortion(codebook, CB_percent);


		//判断D_cb1与D_cb2的大小并根据此对m1,m2,f进行操作
		if(D_cb1 > D_cb2)
		{
			m1=m1+1;

⌨️ 快捷键说明

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