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

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

新規登録して質問してみよう
ただいま回答率
85.35%
scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

解決済

2回答

2158閲覧

与えられた領域内を円で充填したい

doomori

総合スコア24

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

0グッド

0クリップ

投稿2021/08/06 08:42

CADを自作しているのですが、下記のような領域を与えられたときに、
イメージ説明
下記のように領域を円で充填したいと考えています。
半径はlist=[7.0,9.0,11.0,13.0]から取ると考えています。
イメージ説明
これまでは、人が一円づつ手打ちしていたのを、自動化できないものかと
考えています。

こういう問題は機械学習でなんとかできるのではないかと
調べてみましたが、、、解決の糸口もわかりませんでした。
scikit-learnで考えると、
train_dataは(x1,y1,bulge1,x2,y2,bulge2,x3,y3,bulge3,x4,y4,bulge4,......)
とでき、(要素数は常にちがう。)
target_dataは(center_x1,center_y1,r1,center_x2,center_y2,r2,center_x3,center_y3,r3......)
となりますが、要素数が常に違うことになります。

このような問題に適した機械学習ライブラリ、方法、別のアプローチなど
あれば、ご教授お願い致します。

つたない文章で失礼しました。

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

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

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

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

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

ikadzuchi

2021/08/07 17:27

とりあえずどういった条件で埋めたいのかが分かりません。 「埋めた面積が大きい方が嬉しい」や「大きな円を使った方が嬉しい」が想定されますが、明確にしてください。 そもそも、可能ならこの図形をどのような目的に使うのかも明かした方が適切な回答が得られるでしょう。
doomori

2021/08/09 06:33

失礼しました。 用途は、この領域を工具で削り取ることを目的としています。 その際に削り取る量を減らすために(工具の負担を減らし長持ちさせたい) 穴をこの領域内にあらかじめ可能なだけ、空けておき、 その穴から工具を進入させて、この領域を工具で削りとります。 工具もできるだけ大きな径を使いたいため、 できるだけ大きな円(in 13or11or9or7)を最低一つは配置し、(「大きな円を使ったほうがうれしい」) それ以外は「埋めた面積が大きいほうが嬉しい」となります。
ikadzuchi

2021/08/09 11:39

まだちょっと状況がよく分かりませんね。 ノミか何かで貫通しない穴を彫る感じでしょうか。 丸穴をあける方は何の工具でしょう。フライス盤ではなさそうですが、ボール盤やドリルで適切な深さに止めるのも普通はしない操作です。 まあ何にせよ丸穴を開けるとして、事前に位置を決めておく必要があるのですか? コンピュータ制御で穴を開けるわけではなさそうですから、人間が適当にその場で開ければ済みそうに思うのですが。
doomori

2021/08/09 12:54

丸穴はドリル工具で、領域はエンドミル工具です。 NCコードに出力し、マシニングセンターでの加工を想定しています。 TakaiY の言われるように、実装していくことにしました。 抽象的すぎて本当に申し訳ありません、次回から気を付けます。 ありがとうございました。
ikadzuchi

2021/08/09 13:06

NCでしたか。となると見たことの無い加工方法ですね。 全体をエンドミルで削ればよいのではないでしょうか。 最初に太いエンドミルで削れるところを削り、残った細かい部分を細いエンドミルで削るのが一般的ではないかと思うのですが。
doomori

2021/08/09 13:23

そうなんです、エンドミルで削るのですが、 その前にドリルでエンドミルの負担を軽くするために、領域をハチの巣のように 穴だらけにする加工を前工程に入れています。 材料がSKH51,ASP23,ZCDMなので、エンドミルの持ちをよくするために前工程を入れています。
doomori

2021/08/09 13:58

材料がSKH51,ASP23,ZCDMなので、エンドミルの持ちをよくするために前工程を入れています -> 材料がSKH51,ASP23,ZCDMで、すごく硬い材料なので、 エンドミルの持ちをよくするために前工程を入れています
ikadzuchi

2021/08/09 14:08

ああ、なるほどやっと分かってきました。 エンドミルに負担を掛けないためにドリルに負担を集めるということでしたか。 方針に納得しました。長々とお時間取らせすみませんでした。
doomori

2021/08/09 14:20

>エンドミルに負担を掛けないためにドリルに負担を集めるということでしたか。 >方針に納得しました。長々とお時間取らせすみませんでした。 とんでもない、こちらこそ申し訳ありません。 自分の知りたいこと、分からないこと、分かっていること、 他の知りたいこと、分からないこと、分かっていること、 それらをきちんと理解し分別してから質問するようにします。 ほんとうにありがとうございました。
guest

回答2

0

これ、すごく難しい問題ですよ。条件もあいまいです。
できるだけ大きい円を多くいれたい? 隙間を減らしたい?

そして、これは機械学習ではできない問題だと思います。正解がわからないので。

こういう問題は充填問題と呼びます。「図形 円による充填」などで検索するといろいろな研究の情報を見ることができると思います。

投稿2021/08/06 12:35

TakaiY

総合スコア13790

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

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

doomori

2021/08/07 07:55

そうなんです、正解がないのです。 ただ、人間に「こういう感じで円を埋めていって」といえば、各々に近い図形ができ それらを数百サンプル(数千?)集めて、学習させれば、近い図形ができるものと 思っていました。(それを可能にするライブラリ内のモデルは分かりませんが。) もちろん、各々のサンプルのtrain_data数、target_data数が違うので それを可能にするモデルがあるのかもわかりません。 >これ、すごく難しい問題ですよ。条件もあいまいです。 >できるだけ大きい円を多くいれたい? 隙間を減らしたい? 入力、出力が数値化でき、結果(条件)はあいまい(各々の人間が近しい図形を作成するという意味で) な問題こそ、機械学習で解決できると勘違いしておりました。 返信、ありがとうございました。
TakaiY

2021/08/07 08:49

「人間に「こういう感じで円を埋めていって」といえば、各々に近い図形ができ」るというのは俄には信じ難いです。 例に示されたものの中央付近にあるような詰めかたを人ができるとは思えませんし、右上の場合は細密の重点方法が他にもありどちらがいいかの評価が必要です。 もし、人が埋めるときに「こんなふうに詰めていく」というようなノウハウがあるのであれば、それを実装していくのが近道ではないでしょうか。
doomori

2021/08/09 12:50

>もし、人が埋めるときに「こんなふうに詰めていく」というようなノウハウがあるのであれば、それを実装>していくのが近道ではないでしょうか。 まったくその通りだと思いました。 質問が抽象的すぎて、反省しております、ありがとうございました。
guest

0

ベストアンサー

別のアプローチなど

と言えるかどうかわかりませんが…

  • 円同士が重なったら押しのけあう
  • (当然ながら,円は領域の境界からも押される)

といったようなプログラムを組めば,
領域内に適当に円を1つずつ追加していけば位置が勝手に調整されることになるのではないでしょうか.
(円の追加位置をランダムに選ぶ形であれば,ある領域に関して適当に何回か試行させて一番良かった結果を採用するとか.)

投稿2021/08/06 10:09

fana

総合スコア11996

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問