习题6.7代码

习题6.7代码

import numpy as np
import pandas as pd
import cvxpy as cp
import networkx as nx
import matplotlib.pyplot as plt
df = pd.read_excel('F:\python数学建模与算法\源程序\《Python数学建模算法与应用》程序和数据\第6章 图论模型\data6.xlsx')
D = df.values
dots = D[:, 0]
xs = D[:, 1]
ys = D[:, 2]
types = D[:, 3].astype('float')
ind1 = np.where(types == 1)[0]
ind2 = np.where(types == 2)[0]
indnan = np.where(np.isnan(types))[0]
dot_num = len(dots)
W = np.zeros((dot_num, dot_num))

for i in range(dot_num):
this_dot = D[i, 0]
this_id = np.where(dots == this_dot)
neighbour_dots = D[i, 4:7]
for d in neighbour_dots:
if d is not np.nan:
neighbour_id = np.where(dots == d)
W[this_id, neighbour_id] = 1
W += W.T
fig = plt.figure(dpi=600)
ax = fig.add_subplot(111)
ax.plot(xs[ind1], ys[ind1], '', color='r', markersize=7, zorder=10, label='一类重要目标')
ax.plot(xs[ind2], ys[ind2], 'x', color='#f86b1d', markersize=5, zorder=10, label='二类重要目标')
ax.plot(xs[indnan], ys[indnan], '.k', markersize=5, zorder=10, label='一般目标')
for i in range(len(dots)):
ax.text(xs[i]+10, ys[i]+15, dots[i], fontsize=5)
for i in range(dot_num):
for j in range(i+1, dot_num):
if W[i,j] != 0:
ax.plot([xs[i], xs[j]], [ys[i], ys[j]], color='k', linewidth=0.5)
ax.legend(fontsize=5)
fig.show()
WW = []
for i in range(dot_num):
for j in range(i+1, dot_num):
if W[i,j] != 0:
WW.append([i, j, np.sqrt((xs[i]-xs[j])2 + (ys[i]-ys[j])2)])
G = nx.Graph()
G.add_weighted_edges_from(WW)
T = nx.minimum_spanning_tree(G)
w = nx.get_edge_attributes(T, 'weight')
print("最小生成树的长度为:", sum(w.values()))
np.array(G.nodes)
indL = np.where(dots'L')[0][0]
indR3 = np.where(dots
'R3')[0][0]
path = nx.shortest_path(G, indL, indR3, weight='weight')
dis = nx.shortest_path_length(G, indL, indR3, weight='weight')
path_lb = dots[path]
print("最短路径为:", path_lb)
print("最短距离为:", dis)
fig = plt.figure(dpi=600)
ax = fig.add_subplot(111)
ax.plot(xs[ind1], ys[ind1], '
', color='r', markersize=7, zorder=10, label='一类重要目标')
ax.plot(xs[ind2], ys[ind2], 'x', color='#f86b1d', markersize=5, zorder=10, label='二类重要目标')
ax.plot(xs[indnan], ys[indnan], '.k', markersize=5, zorder=10, label='一般目标')
for i in range(len(dots)):
ax.text(xs[i]+10, ys[i]+15, dots[i], fontsize=5)
for i in range(dot_num):
for j in range(i+1, dot_num):
if W[i,j] != 0:
ax.plot([xs[i], xs[j]], [ys[i], ys[j]], color='k', linewidth=0.5)
for i, j in zip(path[:-1], path[1:]):
ax.plot([xs[i], xs[j]], [ys[i], ys[j]], color='cornflowerblue', linewidth=1)
ax.legend(fontsize=5)
fig.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/818761.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在华为云服务器上测试GCC for OpenEuler的特性

步骤1:购买并配置华为云服务器 1.1 注册华为云账号访问华为云官网:打开浏览器,访问 华为云官网。 注册账号:点击页面右上角的“注册”按钮。 按照提示填写必要的信息(邮箱、密码、验证码等)完成注册。 可能需要验证邮箱,请按照邮件中的指示完成验证。1.2 登录华为云控制…

python第三章课后习题

ef X(n): # 差分方程的解 return 2 * (-1)**(n + 1) n_values = [0, 1, 2, 3, 4, 5] for n in n_values: print(f"X({n}) = {X(n)}") print("学号:3028")import networkx as nx G = nx.DiGraph() for i in range(1, 7): G.add_node(i) edges = [ (1, 2), …

东山Pi柒号-主板简介

东山Pi柒号-开发板 最近淘到了一块性价比还不错的开发板,东山派柒号。出自韦东山店,使用芯片STM32MP157,正好学习一下。 板子文档链接: DongshanPI Board Documentation Center. 以下是摘自该网站的一些信息: 硬件功能描述核心板规格SOC主控: STM32MP157DAC (双核CorteX …

【Flask】线上部署

1.基本流程1.本地开发项目 2.git将代码提交“仓库” 3.服务器获取代码 4.创建虚拟环境 + 激活 + 安装第3方模块 5.uwsgi -> 基于uwsgi启动Flask程序 9001 6.nginx + 配置 7.其他- 启动脚本- 关闭脚本2.第一步到第二步就不缀叙了,直接上代码仓库地址https://gitee.com/xiao-…

24.10.19

A 数学题,不会。 随便取一数 \(v\),询问得到 \(t \equiv \log_g v \pmod p\)。 我们希望找到 \(x\) 使得 \(v^x \equiv g \pmod p\),即 \(g^{tx} \equiv g \pmod p \Leftrightarrow tx \equiv 1 \pmod {p-1}\)。那么只要 \(t\) 与 \(p - 1\) 互质即可求得逆元。 有原根相关知…

git安装-Tortoise git 安装汉化教程

git安装,Tortoise git安装汉化教程,代码版本管理工具1.首先下载 去官网下载 如果下载比较慢的,链接自取 https://pan.quark.cn/s/fcb9d0b39c7f 2. 安装git3. 安装git图形化工具Tortoise git4. 汉化

字符串json数组怎么转换成jsonobject类型

字符串数据[]怎么转换成jsonobject格式 String jsonString = "[{\"code\": \"200\", \"msg\": \"读取成功,返回数据条数\", \"data\": [{\"user_id\": \"1\", \"user_name\": \"小…

最新激活Navicat 15教程,附Keygen Patch

前言 大家好,我是小徐啊。navicat是一款常用的数据库连接工具,但是它本身是需要收费的,很不方便。那么,有没有免费的方式呢?今天小徐就介绍下如何激活navicat的方式,永久激活。文末附获取方式。 如何安装 首先,双击navicat的安装包,开始安装,旁边的就是激活工具,待会…

Python pickle

Python picklepickle在python中 实现对象结构的 序列化和反序列化 python序列化(Pickling)是一个将python对象层次结构转换为 可以本地储存 或者 网络传输的 字节流的过程 python反序列化(unpickling) 是将字节流还原为对象层次结构数据序列化:就是把不能直接储存的数据 储存…