回答欄に書かれている情報を、質問欄に載せて修正していただけますか。
修正は、質問欄の「編集」ボタンから可能です。
不要になった回答欄は、削除依頼を出されると良いかと思います。
matplotlibで描画する方法がわからず、、、の質問です。中心点から円を描画する方法しか知らないのでいろいろ調べたのですが、添付のコードがやっと起動させることができ、ratio(面積比率)が最適化できたと思うのですが。
Cが中心で、rが半径と考え、以下のようにcircleを定義しました。
コード import cvxpy as cvx import numpy as np import numpy as ndarray import matplotlib.pyplot as plt import dccp W = 20 UB = 10 n = 40 r = np.linspace(1,5,n) c = cvx.Variable((n,2)) constr = [] for i in range(n-1): for j in range(i+1,n): constr.append(cvx.norm(c[i,:]-c[j,:])>=r[i]+r[j]) prob = cvx.Problem(cvx.Minimize(cvx.max(cvx.norm(c, axis=1)+r)), constr) prob = cvx.Problem(cvx.Minimize(cvx.max(cvx.max(cvx.abs(c),axis=1)+r)), constr) prob.solve(method = 'dccp', ccp_times = 1) l = cvx.max(cvx.max(cvx.abs(c),axis=1)+r).value*2 pi = np.pi ratio = pi*cvx.sum(cvx.square(r)).value/cvx.square(l).value print("ratio =", ratio) print(prob.status) fig = plt.figure() ax = fig.add_subplot(111,aspect='equal') ax.set_xlim([0,W]) ax.set_ylim([0,UB]) for i in range(n): circ = plt.Circle((c[i,:].value()), r[i]) circ = plt.Circle((0.1, 0.1), 0.1) ax.add_patch(circ) plt.show() ところが以下のエラーが出ました。描画がないとratio等は印字されるのですが。 ratio = 0.6385367436601236 Converged Traceback (most recent call last): File "C:\Users\xxxx\Desktop\円配列.py", line 35, in <module> circ = plt.Circle((c[i,:].value()), r[i]) TypeError: 'numpy.ndarray' object is not callable 解決にはなっていませんが、円が描画できると思ったのですが。
あなたの回答
tips
プレビュー