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

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

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

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

Q&A

解決済

2回答

2473閲覧

pythonのエラーコードの読み方について

YYY9856

総合スコア13

Python 3.x

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

0グッド

0クリップ

投稿2018/11/22 06:12

編集2018/11/26 04:28

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
pythonで最適化システムを作っています。
超越方程式の解を変数で出し(一般解)、他の式の変数に入れる機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

エラーメッセージの読み方が分かりません。
つまりどのファイルのどの行に何が起こっていると言われているのか
教えていただきたいです。

ソースコードが長いですが、コード内の#ここから #ここまでを追加するとこのエラーが出るようになりました。
OpenGoddard.optimizeは以下のコードです。
https://github.com/istellartech/OpenGoddard/blob/master/OpenGoddard/optimize.py

エラーメッセージ

0.01
---- iteration : 1 ----
[ 0. 0.01036504 0.03471855 0.07291493 0.12484478 0.19036281
0.26928628 0.36139515 0.46643267 0.58410607 0.71408738 0.8560143
1.00949126 1.17409048 1.34935321 1.53479094 1.72988684 1.93409712
2.14685263 2.36756038 2.5956052 2.83035151 3.07114501 3.31731459
3.5681741 3.82302438 4.08115509 4.34184679 4.60437288 4.86800166
5.13199834 5.39562712 5.65815321 5.91884491 6.17697562 6.4318259
6.68268541 6.92885499 7.16964849 7.4043948 7.63243962 7.85314737
8.06590288 8.27011316 8.46520906 8.65064679 8.82590952 8.99050874
9.1439857 9.28591262 9.41589393 9.53356733 9.63860485 9.73071372
9.80963719 9.87515522 9.92708507 9.96528145 9.98963496 10. ]
<class 'numpy.ndarray'>
Traceback (most recent call last):
File "Low_Thrust_Orbit_Transfer17.py", line 222, in <module>
prob.solve(obj, display_func, ftol=1e-12)
File "C:\Users\yokotalab\AppData\Local\Programs\Python\Python36-32\lib\site-packages\OpenGoddard\optimize.py", line 683, in solve
"ftol": ftol})
File "C:\Users\yokotalab\AppData\Local\Programs\Python\Python36-32\lib\site-packages\scipy\optimize_minimize.py", line 611, in minimize
constraints, callback=callback, **options)
File "C:\Users\yokotalab\AppData\Local\Programs\Python\Python36-32\lib\site-packages\scipy\optimize\slsqp.py", line 313, in _minimize_slsqp
for c in cons['eq']]))
File "C:\Users\yokotalab\AppData\Local\Programs\Python\Python36-32\lib\site-packages\scipy\optimize\slsqp.py", line 313, in <listcomp>
for c in cons['eq']]))
File "C:\Users\yokotalab\AppData\Local\Programs\Python\Python36-32\lib\site-packages\OpenGoddard\optimize.py", line 649, in for_solver
return func(arg0, arg1)
File "C:\Users\yokotalab\AppData\Local\Programs\Python\Python36-32\lib\site-packages\OpenGoddard\optimize.py", line 620, in equality_add
dx = self.dynamics[i](self, obj, i)
File "Low_Thrust_Orbit_Transfer17.py", line 56, in dynamics
s = optimize.fsolve(h,0)
File "C:\Users\yokotalab\AppData\Local\Programs\Python\Python36-32\lib\site-packages\scipy\optimize\minpack.py", line 148, in fsolve
res = _root_hybr(func, x0, args, jac=fprime, **options)
File "C:\Users\yokotalab\AppData\Local\Programs\Python\Python36-32\lib\site-packages\scipy\optimize\minpack.py", line 227, in _root_hybr
ml, mu, epsfcn, factor, diag)
ValueError: The array returned by a function changed size between calls

class Orbiter:
def init(self):

self.a0 = 1.0 self.vr0 = 0.0 self.vt0 = 1.0 self.af = 4.0 self.vrf = 0.0 self.vtf = 0.5 self.e_0 = 0.7 self.ef = 0.0 self.tf_max = 1000 self.mu = 3.98e14 self.R = 6678000 self.u_max = 0.01 print(self.u_max)

def dynamics(prob, obj, section):

a = prob.states(0, section) vr = prob.states(1, section) vt = prob.states(2, section) beta = prob.states(3, section) e = prob.states(4, section) ur1 = prob.controls(0, section) ur2 = prob.controls(1, section) ut1 = prob.controls(2, section) ut2 = prob.controls(3, section) t = prob.time_update()#ここから print(t) print(type(t)) def f(E): return E - np.cos(E) def g(E): return np.sqrt(obj.mu/obj.R**3)* t def h(E): return f(E)-g(E) s = optimize.fsolve(h,0) r = a * (1 -e * np.cos(s))#ここまで dx[0] = vr dx[1] = vt**2 / r - 1 / r**2 + (ur1 - ur2) -(ui1 - ui2) / np.cos(beta) * np.sin(beta) dx[2] = - vr * vt / r + (ut1 - ut2) return dx()

def equality(prob, obj):
a = prob.states_all_section(0)
vr = prob.states_all_section(1)
vt = prob.states_all_section(2)
e = prob.states_all_section(3)
ur1 = prob.controls_all_section(0)
ur2 = prob.controls_all_section(1)
ut1 = prob.controls_all_section(2)
ut2 = prob.controls_all_section(3)

tf = prob.time_final(-1) result = Condition() # event condition result.equal(a[0], obj.a0) result.equal(vr[0], obj.vr0) result.equal(vt[0], obj.vt0) result.equal(e[0], obj.e_0) result.equal(a[-1], obj.af) result.equal(vr[-1], obj.vrf) result.equal(vt[-1], obj.vtf) result.equal(e[-1], obj.ef) return result()

def inequality(prob, obj):
a = prob.states_all_section(0)
vr = prob.states_all_section(1)
vt = prob.states_all_section(2)
e = prob.states_all_section(3)
ur1 = prob.controls_all_section(0)
ur2 = prob.controls_all_section(1)
ut1 = prob.controls_all_section(2)
ut2 = prob.controls_all_section(3)

tf = prob.time_final(-1) result = Condition() # lower bounds result.lower_bound(a, obj.a0) result.lower_bound(e, 0.0) result.lower_bound(ur1, 0.0) result.lower_bound(ut1, 0.0) result.lower_bound(ur2, 0.0) result.lower_bound(ut2, 0.0) result.lower_bound(tf, 0.0) # upper bounds result.upper_bound(a, obj.af) result.upper_bound(e, obj.e_0) result.upper_bound(ur1, obj.u_max) result.upper_bound(ut1, obj.u_max) result.upper_bound(ur2, obj.u_max) result.upper_bound(ut2, obj.u_max) result.upper_bound(tf, obj.tf_max) return result()

def cost(prob, obj):
return 0.0

def running_cost(prob, obj):

tf = prob.time_final(-1) return tf

========================

plt.close("all")
plt.ion()

Program Starting Point

time_init = [0.0, 10]
n = [60]
num_states = [5]
num_controls = [4]
max_iteration = 8

flag_savefig = True

savefig_dir = "10_Low_Thrust_Orbit_Transfer/"

------------------------

set OpenGoddard class for algorithm determination

prob = Problem(time_init, n, num_states, num_controls, max_iteration)
obj = Orbiter()

========================

Initial parameter guess

a_init = Guess.linear(prob.time_all_section, obj.a0, obj.af)

Guess.plot(prob.time_all_section, r_init, "r", "time", "r")

if(flag_savefig):plt.savefig(savefig_dir + "guess_r" + savefig_add + ".png")

vr_init = Guess.linear(prob.time_all_section, obj.vr0, obj.vrf)

Guess.plot(prob.time_all_section, vr_init, "vr", "time", "vr")

if(flag_savefig):plt.savefig(savefig_dir + "guess_vr" + savefig_add + ".png")

vt_init = Guess.linear(prob.time_all_section, obj.vt0, obj.vtf)

Guess.plot(prob.time_all_section, theta_init, "vt", "time", "vt")

if(flag_savefig):plt.savefig(savefig_dir + "guess_vt" + savefig_add + ".png")

ur1_init = Guess.linear(prob.time_all_section, obj.u_max, obj.u_max)

Guess.plot(prob.time_all_section, ur1_init, "ur1", "time", "ur1")

if(flag_savefig):plt.savefig(savefig_dir + "guess_ur1" + savefig_add + ".png")

ut1_init = Guess.linear(prob.time_all_section, obj.u_max, obj.u_max)

Guess.plot(prob.time_all_section, ut1_init, "ut1", "time", "ut1")

if(flag_savefig):plt.savefig(savefig_dir + "guess_ut1" + savefig_add + ".png")

e_init = Guess.linear(prob.time_all_section, obj.e_0, obj.ef)

prob.set_states_all_section(0, a_init)
prob.set_states_all_section(1, vr_init)
prob.set_states_all_section(2, vt_init)
prob.set_states_all_section(3, e_init)

prob.set_controls_all_section(0, ur1_init)
prob.set_controls_all_section(2, ut1_init)

========================

Main Process

Assign problem to SQP solver

prob.dynamics = [dynamics]
prob.knot_states_smooth = []
prob.cost = cost
prob.running_cost = running_cost
prob.equality = equality
prob.inequality = inequality

def display_func():
tf = prob.time_final(-1)
print("tf: {0:.5f}".format(tf))

prob.solve(obj, display_func, ftol=1e-12)

========================

Post Process

------------------------

Convert parameter vector to variable

a = prob.states_all_section(0)
vr = prob.states_all_section(1)
vt = prob.states_all_section(2)
beta = prob.states_all_section(3)
e = prob.states_all_section(4)

ur1 = prob.controls_all_section(0)
ur2 = prob.controls_all_section(1)
ut1 = prob.controls_all_section(2)
ut2 = prob.controls_all_section(3)

time = prob.time_update()

def f(E):
return E - np.cos(E)
def g(E):
return np.sqrt(obj.mu/obj.R**3)* time
def h(E):
return f(E)-g(E)

s = optimize.fsolve(h,0)
print(s)
r = a * (1 -e * np.cos(s))

aa= sum(np.abs(ut1)+np.abs(ut2))
b= sum(np.abs(ur1)+np.abs(ur2))
c= sum(np.abs(ui1)+np.abs(ui2))

print(aa0.001obj.mu / obj.R2)
print((b+c)0.001obj.mu / obj.R
2)

plt.show()

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

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

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

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

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

can110

2018/11/22 06:20

そもそも提示ソースにエラー発生行が含まれていません。もう少し他人に分かりやすいよう詳細を丁寧に記載、質問ください
YYY9856

2018/11/22 06:21

承知しました。ありがとうございます。
can110

2018/11/22 07:53

「obj.R3」「a3」「t」の値と型を提示される(print(x)、print(type(x)))と適切な回答が得られるかと思います。
YYY9856

2018/11/22 08:25

ありがとうございます。修正いたします。
guest

回答2

0

エラーがどの経路をたどって吐かれたものなのか
実際に吐かれたエラー

の順で記載されています

ただ基本的にこのエラーを見て思うことは一番上の

Traceback (most recent call last):

File "10_Low_Thrust_Orbit_Transfer16.py", line 259, in <module>
prob.solve(obj, display_func, ftol=1e-12)

と一番下の

AttributeError: 'float' object has no attribute 'sqrt'

の二つで、
おそらくftolってとこにはfloatじゃなくて
sqrtっていう関数を持ったクラスかなんかを
入れなきゃいけないんじゃないかなって思いますかね

自分は基本的に一番下と上のほうの自分が関係するところを読んで
エラーを理解しています
読んでもわからなければ一番下をググればたいてい解決策が出てきます

投稿2018/11/22 07:06

ko.tu

総合スコア178

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

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

YYY9856

2018/11/22 07:24

ありがとうございます。試してみます。
guest

0

ベストアンサー

File "10_Low_Thrust_Orbit_Transfer16.py", line 259, in <module> prob.solve(obj, display_func, ftol=1e-12)

の呼び出し先

File "10_Low_Thrust_Orbit_Transfer16.py", line 63, in g return np.sqrt(obj.R3/a3)* t AttributeError: 'float' object has no attribute 'sqrt'

にてAttributeErrorが発生しています。
例えば以下のケース(objectに対して操作)で発生しえます。

Python

1import numpy as np 2a = np.array([4.0],dtype=object) 3#ret = np.sqrt(a) # AttributeError: 'float' object has no attribute 'sqrt' 4a = a.astype(float) 5ret = np.sqrt(a) # OK

投稿2018/11/22 06:58

編集2018/11/22 14:55
can110

総合スコア38262

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

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

YYY9856

2018/11/22 07:23

ありがとうございます。 np.sqrt(obj.R3/a3)* tこの部分がおかしいということでしょうか? 素人で申し訳ないのですが、このAttributeErrorはどうしたら解決できるでしょうか?
can110

2018/11/22 07:27

一般的にはソースコードが提示されずエラー文だけで原因、解決策を得るのは非常に困難です。 とはいえ「AttributeError: 'float' object has no attribute 'sqrt'」で検索すると有益な情報得られるかもしれません。
YYY9856

2018/11/28 07:13

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問