差分进化算法代码

  • 格式:docx
  • 大小:20.04 KB
  • 文档页数:3

下载文档原格式

  / 9
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

[plain]view plaincopy 1.

44. p = dx(3);

45. %要保证与i不同

46. if j == i

47. j = dx(4);

48. else if k == i

49. k = dx(4);

50. else if p == i

51. p = dx(4);

52. end

53. end

54. end

55.

56. %变异算子

57. suanzi = exp(1-Gm/(Gm + 1-G));

58. F = F0*2.^suanzi;

59. %变异的个体来自三个随机父代

60.

61. son = XG(p,:) + F*(XG(j,:) - XG(k,:));

62. for j = 1: D

63. if son(1,j) >xmin & son(1,j) < xmax %防止变异超出边界

64. XG_next_1(i,j) = son(1,j);

65. else

66. XG_next_1(i,j) = (xmax - xmin)*rand(1) + xmin;

67. end

68. end

69. end

70. %%%%%%%%%%%%%%%%%%%%%%%---交叉操作----%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

71.

72.

73. for i = 1: Np

74. randx = randperm(D);% [1,2,3,...D]的随机序列

75. for j = 1: D

76.

77. if rand > CR & randx(1) ~= j % CR = 0.9

78. XG_next_2(i,j) = XG(i,j);

79. else

80. XG_next_2(i,j) = XG_next_1(i,j);

81. end

82. end

83. end

84.

85. %%%%%%%%%%%%%%%%%%----选择操作---%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

86. for i = 1:Np

87. if f(XG_next_2(i,:)) < f(XG(i,:))

88.

89. XG_next(i,:) = XG_next_2(i,:);

90. else

91. XG_next(i,:) = XG(i,:);

92. end

93. end

94.

95. %找出最小值

96. for i = 1:Np

97. value(i) = f(XG_next(i,:));

98. end

99. [value_min,pos_min] = min(value);

100.

101. %第G代中的目标函数的最小值

102. Gmin(G) = value_min;

103. %保存最优的个体

104. best_x(G,:) = XG_next(pos_min,:); 105.

106. XG = XG_next;

107. trace(G,1) = G;

108. trace(G,2) = value_min;

109. G = G + 1;

110.

111.end

112. [value_min,pos_min] = min(Gmin);

113. best_value = value_min

114. best_vector = best_x(pos_min,:)

115. fprintf('DE所耗的时间为:%f \n',cputime - t0); 116. %画出代数跟最优函数值之间的关系图

117. plot(trace(:,1),trace(:,2));

118.

119.end