HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0924
NUKI抜き取り検査のシミュレーション11未解決


NUKI

リンク

2012/9/24(Mon) 08:24:27|NO.49522

抜き取り検査のシミュレーションをしようと思います。

プログラムしたことはありません。
いろいろ考えたんですが、なにをどうしたらいいかわかりません。

具体的には下記のようになります。


1000個(ロット)の中から、
200個(抜き取り数)を検査し、
不良が30個(合格判定個数)ならロット合格。
31個ならロット不合格。

ロット内の不良率、または不良個数を設定し、
抜き取りはランダム。
(でも不良がランダムなら、先頭から順に検査してもいい?)

ロットの大きさ、不良率(または不良個数)、抜き取り数、合格判定個数を設定し、
そのロットを何回も検査し、合格率をシミュレーションしたいです。
最低100回、できれば1000回以上。(回数も変動できるといいです。)

設定の入力がむずかしいなら、ソース内で直接書くようなことでもいいです。

そいうシミュレーションを作りたいです。

どんなふうな作り方すればいいでしょうか?



この記事に返信する


f(始業中)

リンク

2012/9/24(Mon) 08:35:28|NO.49523

配列変数を覚えよう。

あとは

randomize
rnd
if
repeat
loop

これらをエディタに打ち込んで、それぞれにカーソル合わせて、f1キー押せば良いんでね。


考え方は難しくない。

○初期設定部
ロット(1000個のデータ)を管理する配列変数を用意し、全てを良品とする
指定NG率から、必要な数だけ、ランダムな番号の良品を不良品に変更する。
○実測部
抜き取り数の数だけ、ロット内のランダムな番号の品物をピックアップし、良品、不良品の集計をする
○結果部
設定以上のNG品が発生しているか判断し、修了。

これだけ。



@key

リンク

2012/9/24(Mon) 19:10:23|NO.49529

初見で具体的なものを作ろうとしても無理だから、サンプルやガイドブックなんかで
遊んでそれから質問しながら作りましょう



KA

リンク

2012/9/24(Mon) 21:47:43|NO.49540

>>抜き取り検査のシミュレーションをしようと思います。
と言うより、単なる確率の確認プログラムという気がします。

1ロット1000個中から200個を抽出し、不良率以内かどうか
調べる事になりますが、ロット数をX、不良率Y、抽出数Zとする
と、回数を増やせばZの不良率もYとなります。

1ロット100個として10個不良があれば不良率10%、10個
取り出しても1個は不良が含まれる確率(10回中1不良)です。

その確率を確認すると言う意味なら、作る意味も有るでしょうが、
その辺は判断を任せます。



NUKI

リンク

2012/9/25(Tue) 07:43:18|NO.49550

確率の確認です。

不良率1.33%のロットから
200個抜き取り、その中の不良が2個以下になることは、50%だそうです。
素人目には1%じゃ?ってかんじです。

自分で計算するのは難しすぎます。
でも、これはJISやISOの規格で、そう決まっているんです。
疑うわけではありません。

規格の文章が難解で、自分の解釈が間違ってるかもしれません。
シミュレーションしようと思っただけです。
また、確率を実感してみたいとも思います。

でもロットの大きさは最大で50万以上もあり、
乱数も、ほかから持ってこないと、だめかもしれません。



KA

リンク

2012/9/25(Tue) 08:44:57|NO.49551

>>その中の不良が2個以下になることは50%だそうです。
>>素人目には1%じゃ?ってかんじです。
そういう意味であれば、標準偏差という考えも加わってきます。

200個中不良0個
200個中不良1個
200個中不良2個
200個中不良3個
200個中不良4個
・・・・・・・
200個中不良n個

の全体に占める、不良が0,1,2の場合の合計割合です。

200個でも不良個数の割合は1.33%(2.66個)
100個でも不良個数の割合は1.33%(1.33個)

なので、質問の方法では1.33しか出て来ません。
それぞれの不良個数の統計を取り、個数が0,1,2の場合の合計を
全体で割る必要があります。(それが、だいたい50%なのでしょう)

確かに面倒くさいです、ランダムに数値を選択すると同じ数値が出て
くる可能性があり、それを何とかする必要があるのでプログラム的に
は煩雑になります。

こう書いておけば、誰かが作ってくれるかも知れません。



f(始業中)

リンク

2012/9/25(Tue) 09:09:06|NO.49552

試みに作ってみたが

>不良率1.33%のロットから
>200個抜き取り、その中の不良が2個以下になることは、50%だそうです。

ふむ、大体その位で合ってる(ヲ

条件
ロットワーク数 : 1000
不良率 : 0.0133
抜き取り数 : 200
ロットOK条件 : 抽出ワークにNGが2個以内
テスト回数 : 1000

結果
1回目 ロットOK : 497
2回目 ロットOK : 508
3回目 ロットOK : 510
4回目 ロットOK : 505
5回目 ロットOK : 499

ただし、素のrndomize&rand関数な。



f(始業中)

リンク

2012/9/25(Tue) 09:12:33|NO.49553

「HSPを覚えたい」という趣旨では無い様なのでソース捨てとく。


randomize TestCount = 1000 // テストを繰り返す回数 LotSize = 1000 // ロットのワーク数 NgRate = 0.0133 // ワークのNG率指定(1.33%) SampleCount = 200 // サンプル抽出数 OkLevel = 2 // ロットがOKになる不良品数最大値( 31以上はNG ) LotOk = 0 // ロットとしてOKになった回数 LotNg = 0 // ロットとしてNGになった回数 dim Lot , LotSize // ロット領域初期化 NgCount = int( NgRate * LotSize ) // NG率から、ロット内不良品数を算出 repeat TestCount // 指定回数繰り返す gosub *init // 初期化 gosub *main // 集計 gosub *term // 判定 loop mes "LOT OK : " + LotOk // OKになったロットの件数 mes "LOT NG : " + LotNg // NGになったロットの件数 stop *init // 初期化部 repeat LotSize // ロットのワーク数だけ繰り返す Lot( cnt ) = 0 // ロットのワークを全て0(良品)にする loop count = 0 // カウントを初期化 while ( count < NgCount ) // カウントがロット内不良品数を超えるまで繰り返す trg = rnd( LotSize ) // ランダムにワークを選ぶ if Lot( trg ) == 1 : _continue // 既に不良品にしていたら、やり直し Lot( trg ) = 1 // このワークを1(不良品)とする count++ // カウントを増やす wend return *main // 集計部 ok = 0 // ロット内良品数 ng = 0 // ロット内不良品数 count = 0 // カウントを初期化 while ( count < SampleCount ) // カウントがサンプル抽出数を超えるまで繰り返す trg = rnd( LotSize ) // ランダムにワークを選ぶ switch Lot( trg ) // ワークの内容別処理開始 case 0 // 0(良品)だったら ok++ // 良品カウントを増やし swbreak // ワーク内容別処理を抜ける case 1 // 1(不良品)だったら ng++ // 不良品カウントを増やし swbreak // ワーク内容別処理を抜ける default // それ以外だったら _continue // 最初からやり直し swbreak // ワーク内容別処理を抜ける swend // ワークの内容別処理終了 Lot( trg ) = 2 // 処理の終わったワークにはマークをつける(2にしておく) count++ // カウントを増やす wend return *term // 判定部 if ng > OkLevel { LotNG++:return } // NG個数が許容レベルを超えていたらロットNGカウントを増やして終了 LotOk++ // ロットOKカウントを増やして終了 return



NUKI

リンク

2012/9/26(Wed) 04:24:19|NO.49579

f(始業中)さん、ありがとうございました。
希望通りのプログラムです。

「_continue」なんてことができるんですね。勉強になりました。

すいませんが、教えてください。
>OkLevel = 2 // ロットがOKになる不良品数最大値( 31以上はNG )
どうして31以上だめなのでしょうか?

見たところ、NGの理由がわかりません。



てん

リンク

2012/9/26(Wed) 04:45:03|NO.49580

多分、例が「OkLevel = 2」なので、「2まではOK, 3以上はNG」ってことを書こうとしてタイプミスしたのかと



f(始業中)

リンク

2012/9/26(Wed) 08:30:08|NO.49582

あー、直し忘れてたな。

実は最初の返答した後には作ってたので、
一番最初に書いてある通り「31個以上はNG」を条件にしていた奴の名残。



NUKI

リンク

2012/9/27(Thu) 23:10:12|NO.49606

ありがとうございます。

「OkLevel」変数の上限かとおもいました。
NG判定ということですね。



ONION software Copyright 1997-2023(c) All rights reserved.