質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

最適化

最適化とはメソッドやデザインの最適な処理方法を選択することです。パフォーマンスの向上を目指す為に行われます。プログラミングにおける最適化は、アルゴリズムのスピードアップや、要求されるリソースを減らすことなどを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

3674閲覧

P-median問題とWeber問題のコードについて

退会済みユーザー

退会済みユーザー

総合スコア0

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Anaconda

Anacondaは、Python本体とPythonで利用されるライブラリを一括でインストールできるパッケージです。環境構築が容易になるため、Python開発者間ではよく利用されており、商用目的としても利用できます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

最適化

最適化とはメソッドやデザインの最適な処理方法を選択することです。パフォーマンスの向上を目指す為に行われます。プログラミングにおける最適化は、アルゴリズムのスピードアップや、要求されるリソースを減らすことなどを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/10/14 01:13

前提・実現したいこと

最近プログラミングを始めた超初心者です。
Python3(Anaconda Jupyter Notebook) で数理最適化問題を解いています。
エクセルから座標データを入力し,それをP-median問題を用いて拠点の導出を行い,そこからWeber問題用いて中継となる地点を導出したいと考えています。

現段階としてP-median問題のコードはできているんですが,それ以降のWeber問題が分かりません。また,拠点となった地点に対して色を変えたりしたいのですがどうやればいいのでしょうか?

よろしくお願いします。

該当のソースコード

Python

1import numpy as np 2import pandas as pd 3import matplotlib.pyplot as plt 4import networkx as nx 5import pulp 6import xlrd 7import math 8import random 9 10 11#=====Parameter===== 12h_omomi = 1 13s_omomi = 1 14p_omomi = 1 15#=================== 16 17#エクセルからデータ取得 18book = xlrd.open_workbook("***.xlsx") 19sheet = book.sheet_by_name("Sheet") 20 21def get_data(sheet,rowx,colx): 22 data = [] 23 for row in range(rowx, sheet.nrows): #データ起点から 24 value = sheet.cell(row, colx).value 25 data.append(value) 26 return data 27 28x = get_data(sheet, 1, 1) #データの起点はB1 29y = get_data(sheet, 1, 2) #データの起点はC1 30H = get_data(sheet, 1, 3) #データの起点はD1 31S = get_data(sheet, 1, 4) #データの起点はE1 32P = get_data(sheet, 1, 5) #データの起点はF1 33 34#リスト化 35x_1 = [int(h) for h in x] 36y_1 = [int(i) for i in y] 37H_1 = [int(j) for j in Hospital] 38S_1 = [int(k) for k in School] 39P_1 = [int(l) for l in Population] 40 41print(x_1) 42print(y_1) 43print(H_1) 44print(S_1) 45print(P_1) 46 47pos = list(zip(x_1,y_1)) 48print(pos) 49 50 51# 各駅における需要量の計算 52w = [] 53for i in range(len(H_1)): 54 T_W = h_omomi * H_1[i] + s_omomi * S_1[i] + p_omomi * P_1[i] 55 w.append(T_W) 56print(w) 57 58G = nx.Graph() 59for i in range(len(x_1)): 60 G.add_node(i, w=w[i], pos=pos[i]) 61 62def draw_facilities(G): 63 pos = nx.get_node_attributes(G,'pos') 64 nx.draw_networkx(G, pos=pos, with_labels=False) 65 w = nx.get_node_attributes(G, 'w') 66 _ = nx.draw_networkx_labels(G, pos=pos, labels=w, font_color='w') 67 return 68 69plt.figure(figsize=(10,10)) 70draw_facilities(G) 71plt.xlabel("x") 72plt.ylabel("y") 73plt.savefig('plot_1.png') 74 75def solve_p_median_by_pulp(G, p): 76 pmedian = pulp.LpProblem(name='5-median', sense=pulp.LpMinimize) 77 w = nx.get_node_attributes(G, 'w') 78 pos = nx.get_node_attributes(G, 'pos') 79 x = {} 80 y = {} 81 c = {} 82 for v in G.nodes(): 83 x[v] = pulp.LpVariable(name='x{0}'.format(v), cat='Binary') 84 for u in G.nodes(): 85 y[(u, v)] = pulp.LpVariable(name='y{0}_{1}'.format(u, v), cat='Binary') 86 c[(u, v)] = math.sqrt(sum([(pos[u][i] - pos[v][i])**2 for i in range(2)])) 87 pmedian += pulp.LpAffineExpression([(y[(u, v)], w[u] * c[(u, v)]) for u, v in y]) 88 pmedian += pulp.LpAffineExpression([(x[v], 1) for v in G.nodes()]) == p 89 for u in G.nodes(): 90 pmedian += pulp.LpAffineExpression([(y[(u, v)], 1) for v in G.nodes()]) == 1 91 for u, v in y: 92 pmedian += y[(u, v)] - x[v] <= 0 93 pmedian.solve() 94 for v in x: 95 G.node[v]['x'] = x[v].value() 96 for u, v in y: 97 if y[(u, v)].value() == 1: 98 G.add_edge(u, v) 99 return G 100 101G = solve_p_median_by_pulp(G,5) 102plt.figure(figsize=(10,10)) 103draw_facilities(G) 104 105 106plt.xlabel("x") 107plt.ylabel("y") 108plt.savefig('***.png')

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

同じ質問がここにあるので参考になると思います.

投稿2020/03/18 21:57

dark-eater-kei

総合スコア1248

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問