diff --git a/Zhou2021AFED-EF_Sourcecode/Five_function_definition.txt b/Zhou2021AFED-EF_Sourcecode/Five_function_definition.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d4e3c50a9b7bcf10fc9ec89fc89657fcb61b6300
--- /dev/null
+++ b/Zhou2021AFED-EF_Sourcecode/Five_function_definition.txt
@@ -0,0 +1,63 @@
+protected boolean isHostOverUtilized(PowerHost host) {
+			addHistoryEntry(host, getUtilizationThreshold());
+			double totalRequestedMips = 0;
+			for (Vm vm : host.getVmList()) {
+				totalRequestedMips += vm.getCurrentRequestedTotalMips();
+			}
+			double utilization = totalRequestedMips / host.getTotalMips();
+			return utilization > getUtilizationThreshold();
+		}
+
+		//new adding
+		
+
+		protected boolean isHostLowUtilized(PowerHost host) {
+			//addHistoryEntry(host, getUtilizationThreshold());
+			double totalRequestedMips = 0;
+			for (Vm vm : host.getVmList()) {
+				totalRequestedMips += vm.getCurrentRequestedTotalMips();
+			}
+			double utilization = totalRequestedMips / host.getTotalMips();
+			return utilization < getLowUtilizationThreshold();
+		}
+
+
+
+
+                      protected boolean isHostLightUtilized(PowerHost host) {
+			//addHistoryEntry(host, getUtilizationThreshold());
+			double totalRequestedMips = 0;
+			for (Vm vm : host.getVmList()) {
+				totalRequestedMips += vm.getCurrentRequestedTotalMips();
+			}
+			double utilization = totalRequestedMips / host.getTotalMips();
+			return ((utilization < getMiddleUtilizationThreshold()) && utilization < getLowUtilizationThreshold()));
+		}
+		//new adding
+
+
+		
+		protected boolean isHostMiddleUtilized(PowerHost host) {
+			//addHistoryEntry(host, getUtilizationThreshold());
+			double totalRequestedMips = 0;
+			for (Vm vm : host.getVmList()) {
+				totalRequestedMips += vm.getCurrentRequestedTotalMips();
+			}
+			double utilization = totalRequestedMips / host.getTotalMips();
+			return utilization > getMiddleUtilizationThreshold();
+		}
+		//new adding	
+		
+		
+		protected boolean isHostMediumUtilized(PowerHost host) {
+			//addHistoryEntry(host, getUtilizationThreshold());
+			double totalRequestedMips = 0;
+			for (Vm vm : host.getVmList()) {
+				totalRequestedMips += vm.getCurrentRequestedTotalMips();
+			}
+			double utilization = totalRequestedMips / host.getTotalMips();
+			return utilization > getMediumUtilizationThreshold();
+		}
+		
+		//new adding	
+		
\ No newline at end of file
diff --git a/Zhou2021AFED-EF_Sourcecode/KMIR.java b/Zhou2021AFED-EF_Sourcecode/KMIR.java
new file mode 100644
index 0000000000000000000000000000000000000000..96558cb4e0905f481bd975748a9afc0c00f21ee2
--- /dev/null
+++ b/Zhou2021AFED-EF_Sourcecode/KMIR.java
@@ -0,0 +1,34 @@
+package org.cloudbus.cloudsim.examples.power.planetlab;
+
+import java.io.IOException;
+
+
+public class KMIR {
+
+	/**
+	 * The main method.
+	 * 
+	 * @param args the arguments
+	 * @throws IOException Signals that an I/O exception has occurred.
+	 */
+	public static void main(String[] args) throws IOException {
+		boolean enableOutput = true;
+		boolean outputToFile = false;
+		String inputFolder = KMIR.class.getClassLoader().getResource("workload/planetlab").getPath();
+		String outputFolder = "output";
+		String workload = "20110303"; // PlanetLab workload//计算密集型任务
+		String vmAllocationPolicy = "KMeansMadIQR";
+		String vmSelectionPolicy = "mmt"; // Minimum Migration Time (MMT) VM selection policy
+		String parameter = "1.0"; // the safety parameter of the MAD policy
+		new PlanetLabRunner(
+				enableOutput,
+				outputToFile,
+				inputFolder,
+				outputFolder,
+				workload,
+				vmAllocationPolicy,
+				vmSelectionPolicy,
+				parameter);
+	}
+
+}
\ No newline at end of file