图算法对比:破圈法与避圈法、边割法的适用场景分析

版权申诉
0 下载量 151 浏览量 更新于2024-10-15 收藏 6KB RAR 举报
资源摘要信息:"在图论中,破圈法(Cycle Breaking Method)、边割法(Edge Cutting Method)和避圈法(Cycle Avoiding Method)是求解最小生成树问题时可以采用的算法策略。最小生成树是指在一个加权连通图中,选取的边构成的树,使得所有顶点都被包含在内,并且这些边的权值之和最小。该问题在网络设计、电路板设计、物流路径优化等领域有广泛应用。 破圈法的原理是通过删除图中的某些边来消除图中的圈(环),得到一个无环的连通子图,也就是树。这种方法特别适用于边数较少的连通图。当图中的连通度较高但边数不多时,破圈法能够有效地减少计算量,快速求得最小生成树。 避圈法或称为避边法,是在搜索最小生成树的过程中尽可能避免生成圈,从而减少后续需要处理的环。这种方法在边数较多时具有优势,因为直接处理每个新增加的边可能会导致频繁的环处理,从而增加计算复杂度。 边割法是另一种常用的求解最小生成树的方法。它与避圈法不同,边割法侧重于优先处理和割掉权重较大的边。在每一次迭代中,边割法都会识别并割去构成圈的一条权重最大的边,这个过程会一直持续到剩下的图形成最小生成树为止。边割法在处理边数较多的图时表现更为出色,因为它通过逐步剔除权重大的边来逼近最小生成树的结构,从而减少需要考虑的边的数量。 在实际应用中,每种方法的效率会受到具体问题实例的影响。例如,边割法可能在边数较多的情况下更为高效,因为边数多意味着可能需要处理更多的圈,而边割法通过一开始就剔除权重较大的边来避免这些圈的生成。而破圈法在边数较少的情况下更具有优势,因为直接处理少数的边可以更快地得到结果。 文件列表中的'***.txt'可能是一个文本文件,但由于没有更多的上下文信息,无法确定该文件确切内容。不过,文件名中的'采用边割法求最小生成树'表明该文件可能包含了使用边割法解决最小生成树问题的具体实例、算法描述、代码实现或是相关的教学材料。这种文件对学习和理解边割法具有一定的参考价值。" 总结来说,破圈法、边割法和避圈法都是求解最小生成树的有效方法,它们根据图的不同特性以及边的数量和权重的不同,各有其适用场景和优势。在实际应用中,选择合适的算法对提高计算效率和保证结果的准确性至关重要。

***************************master_pro set pp/1*1000/; set p(pp); set pi(pp); pi('1')=yes; p('1')=yes; parameter cp(pp)/ 1 100 /; parameter tp(pp)/ 1 0 /; parameter TM/10/; positive variable y(pp); variable z_master; equation master_obj_fuc; equation master_travel_const; equation master_cob_const; master_obj_fuc.. z_master=e=sum(p,cp(p)*y(p)); master_travel_const.. sum(p,tp(p)*y(p))=l=TM; master_cob_const.. sum(p,y(p))=e=1; model master_pro/master_obj_fuc,master_travel_const,master_cob_const/; *************************************sub_pro set i/1*6/; alias(i,j); set i_o(i)/1/; set i_d(i)/6/; set i_m(i)/2*5/; parameter c(i,j)/ 1.2 2 1.3 9 2.4 2 2.5 3 3.2 1 3.4 5 3.5 12 4.5 4 4.6 2 5.6 2 /; parameter t(i,j)/ 1.2 9 1.3 1 2.4 2 2.5 4 3.2 2 3.4 7 3.5 3 4.5 7 4.6 8 5.6 2 /; parameter w1; parameter w2; binary variable x(i,j); variable z_sub; equation sub_obj_fuc; equation sub_start_const(i_o); equation sub_end_const(i_d); equation sub_mid_const(i_m); sub_obj_fuc.. z_sub=e=sum((i,j),(c(i,j)-w1*t(i,j))*x(i,j))-w2; sub_start_const(i_o).. sum(j$c(i_o,j),x(i_o,j))=e=1; sub_end_const(i_d).. sum(j$c(j,i_d),x(j,i_d))=e=1; sub_mid_const(i_m).. sum(j$c(j,i_m),x(j,i_m))=e=sum(j$c(i_m,j),x(i_m,j)); model sub_pro/sub_obj_fuc,sub_start_const,sub_end_const,sub_mid_const/; *****************************************xunhuan set iter/1*6/; parameter rN/-1/; parameter cp_new; parameter tp_new; parameter results(iter,*); loop(iter$(rN<0), solve master_pro using LP minimazing z_master; w1=master_travel_const.m; w2=master_cob_const.m; solve sub_pro using MIP minimazing z_sub; cp_new=sum((i,j),c(i,j)*x.l(i,j)); tp_new=sum((i,j),t(i,j)*x.l(i,j)); rN=z_sub.l; results(iter,'z')=z_master.l; results(iter,p)=y.l(p); results(iter,'w1')=w1; results(iter,'w2')=w2; results(iter,'cp_new')=cp_new; results(iter,'tp_new')=tp_new; results(iter,'rN')=rN; pi(pp)=pi(pp-1); cp(pi)=cp_new; tp(pi)=tp_new; p(pi)=yes; ); display results;

2023-06-11 上传

import streamlit as st import numpy as np import pandas as pd import pickle import matplotlib.pyplot as plt from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.decomposition import PCA from sklearn.svm import SVC from sklearn.neighbors import KNeighborsClassifier from sklearn.ensemble import RandomForestClassifier import streamlit_echarts as st_echarts from sklearn.metrics import accuracy_score,confusion_matrix,f1_score def pivot_bar(data): option = { "xAxis":{ "type":"category", "data":data.index.tolist() }, "legend":{}, "yAxis":{ "type":"value" }, "series":[ ] }; for i in data.columns: option["series"].append({"data":data[i].tolist(),"name":i,"type":"bar"}) return option st.markdown("mode pracitce") st.sidebar.markdown("mode pracitce") df=pd.read_csv(r"D:\课程数据\old.csv") st.table(df.head()) with st.form("form"): index_val = st.multiselect("choose index",df.columns,["Response"]) agg_fuc = st.selectbox("choose a way",[np.mean,len,np.sum]) submitted1 = st.form_submit_button("Submit") if submitted1: z=df.pivot_table(index=index_val,aggfunc = agg_fuc) st.table(z) st_echarts(pivot_bar(z)) df_copy = df.copy() df_copy.drop(axis=1,columns="Name",inplace=True) df_copy["Response"]=df_copy["Response"].map({"no":0,"yes":1}) df_copy=pd.get_dummies(df_copy,columns=["Gender","Area","Email","Mobile"]) st.table(df_copy.head()) y=df_copy["Response"].values x=df_copy.drop(axis=1,columns="Response").values X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.2) with st.form("my_form"): estimators0 = st.slider("estimators",0,100,10) max_depth0 = st.slider("max_depth",1,10,2) submitted = st.form_submit_button("Submit") if "model" not in st.session_state: st.session_state.model = RandomForestClassifier(n_estimators=estimators0,max_depth=max_depth0, random_state=1234) st.session_state.model.fit(X_train, y_train) y_pred = st.session_state.model.predict(X_test) st.table(confusion_matrix(y_test, y_pred)) st.write(f1_score(y_test, y_pred)) if st.button("save model"): pkl_filename = "D:\\pickle_model.pkl" with open(pkl_filename, 'wb') as file: pickle.dump(st.session_state.model, file) 会出什么错误

2023-06-09 上传