อัลกอริทึมสำหรับการคำนวณเวลาที่เหมาะสมของกระบวนการ ผู้อำนวยการฝ่ายเทคนิคการจัดตารางเวลา (การคำนวณ) ของศูนย์เทคโนโลยีและโซลูชั่นที่เป็นนวัตกรรม "Jet Infosystems"


บทนำ

วัตถุประสงค์ของการประชุมเชิงปฏิบัติการเกี่ยวกับองค์กรการผลิตคือการขยายและให้ความรู้เชิงทฤษฎีอย่างลึกซึ้งยิ่งขึ้น เพื่อปลูกฝังทักษะที่จำเป็นในการแก้ปัญหาที่พบบ่อยที่สุดในการปฏิบัติในองค์กรและการวางแผนการผลิต

เวิร์กชอปประกอบด้วยงานสำหรับส่วนหลักของหลักสูตร ในตอนต้นของแต่ละหัวข้อ จะมีการนำเสนอคำแนะนำระเบียบวิธีโดยย่อและข้อมูลเชิงทฤษฎี งานทั่วไปพร้อมโซลูชันและงานสำหรับโซลูชันอิสระ

การมีคำแนะนำระเบียบวิธีและข้อมูลเชิงทฤษฎีโดยย่อในแต่ละหัวข้อทำให้สามารถใช้การประชุมเชิงปฏิบัติการนี้ในหลักสูตรการติดต่อสื่อสาร


การคำนวณระยะเวลา วงจรการผลิต

เป็นเครื่องบ่งชี้ประสิทธิภาพ กระบวนการผลิตคือระยะเวลาของวงจรการผลิต

วงจรการผลิต- ระยะเวลาพำนักของกรรมกรในกระบวนการผลิตตั้งแต่เริ่มปล่อยวัตถุดิบจนถึงขณะปล่อยผลิตภัณฑ์สำเร็จรูป

วัฏจักรการผลิตประกอบด้วย เวลาทำงาน,ในระหว่างที่มีการใช้แรงงานและ เวลาพัก... การแบ่งขึ้นอยู่กับสาเหตุที่ทำให้เกิดพวกเขาสามารถแบ่งย่อยได้:

1) บน เป็นธรรมชาติหรือเทคโนโลยี - เนื่องจากธรรมชาติของผลิตภัณฑ์

2) องค์กร(แบ่งระหว่างกะ).

ระยะเวลาของวงจรการผลิตประกอบด้วยองค์ประกอบต่อไปนี้:

รอบ T = NSเหล่านั้น + NSกิน + NS tr + NSเคเค + NSม.โอ. + NSม.ท.

ที่ไหน NSเหล่านั้น- เวลาของการดำเนินงานทางเทคโนโลยี

กิน -เวลาของกระบวนการทางธรรมชาติ (การทำให้แห้ง การทำให้เย็นลง ฯลฯ );

เสื้อ tr -เวลาขนส่งสิ่งของที่ใช้แรงงาน

ทีซีซี -เวลาควบคุมคุณภาพ

t m.o -เวลานอนระหว่างการผ่าตัด

t m.ts -เวลาที่ใช้ในคลังสินค้าระหว่างแผนก

(NSสาม NSเคเค สามารถใช้ร่วมกับ NSม.โอ).

การคำนวณระยะเวลาของรอบการผลิตขึ้นอยู่กับประเภทของการผลิต ในการผลิตจำนวนมาก ระยะเวลาของรอบการผลิตจะถูกกำหนดโดยเวลาที่ผลิตภัณฑ์อยู่ในขั้นตอนการผลิต กล่าวคือ

รอบ T = NSในเอ็ม

ที่ไหน NSวี- รอบการปล่อย;

NS- จำนวนสถานที่ทำงาน

ภายใต้ ชั้นเชิงของการปล่อยควรเข้าใจช่วงเวลาระหว่างการเปิดตัวผลิตภัณฑ์ที่ผลิตขึ้นหนึ่งผลิตภัณฑ์กับผลิตภัณฑ์ถัดไป

รอบการปลดปล่อยถูกกำหนดโดยสูตร

เสื้อใน = Teff / V,

ที่ไหน เทฟฟ์- กองทุนที่มีประสิทธิภาพของเวลาทำงานสำหรับรอบการเรียกเก็บเงิน (กะ, วัน, ปี)

วี- ปริมาณการผลิตในช่วงเวลาเดียวกัน (ในหน่วยธรรมชาติ)

ตัวอย่าง: T cm = 8 ชั่วโมง = 480 นาที; T เลน = 30 นาที; → Teff = 480 - - 30 = 450 นาที

B = 225 ชิ้น; → NSชั่วโมง = 450/225 = 2 นาที

วี การผลิตต่อเนื่องโดยที่การประมวลผลเป็นชุดๆ ระยะเวลาของวัฏจักรเทคโนโลยีจะไม่ถูกกำหนดต่อหน่วยการผลิต แต่สำหรับทั้งชุด ยิ่งไปกว่านั้น ขึ้นอยู่กับวิธีการเปิดตัวแบทช์ในการผลิต เราได้รับรอบเวลาที่แตกต่างกัน มีสามวิธีในการเคลื่อนย้ายผลิตภัณฑ์ในการผลิต: แบบต่อเนื่อง แบบขนาน และแบบผสม (แบบอนุกรม-ขนาน)


ผม... ที่ สม่ำเสมอชิ้นส่วนที่เคลื่อนไหว การดำเนินการที่ตามมาแต่ละครั้งจะเริ่มขึ้นหลังจากส่วนก่อนหน้าสิ้นสุดเท่านั้น รอบเวลาสำหรับการเคลื่อนที่ตามลำดับของชิ้นส่วนจะเท่ากับ:

ที่ไหน NS - จำนวนส่วนของแบทช์ที่กำลังดำเนินการ

t ชิ้นผม- อัตราชิ้นของเวลาสำหรับการดำเนินการ

ซี ไอ- จำนวนงานต่อ ผมการดำเนินงานที่;

NS- จำนวนการดำเนินการของกระบวนการทางเทคโนโลยี

มอบชุดละ 5 รายการ แบทช์ถูกส่งผ่านตามลำดับผ่าน 4 การดำเนินการ ระยะเวลาของการดำเนินการครั้งแรก - 10 นาที วินาที - 20 นาที ครั้งที่สาม - 10 นาที ครั้งที่สี่ - 30 นาที (รูปที่ 1)

รูปที่ 1

NSรอบ = NSสุดท้าย = 5 (10 + 20 + 10 + 30) = 350 นาที

วิธีการเคลื่อนย้ายชิ้นส่วนตามลำดับมีข้อดีที่ทำให้อุปกรณ์ทำงานได้โดยไม่ต้องหยุดทำงาน แต่ข้อเสียของมันคือระยะเวลาของวงจรการผลิตในกรณีนี้มากที่สุด นอกจากนี้ยังมีการสร้างสต็อกชิ้นส่วนจำนวนมากในสถานที่ทำงาน ซึ่งต้องใช้พื้นที่การผลิตเพิ่มเติม

II... ที่ ขนานการเคลื่อนไหวของชุดงานแต่ละส่วนจะไม่ล่าช้าในสถานที่ทำงาน แต่จะถูกโอนไปยังการดำเนินการถัดไปทันทีโดยไม่ต้องรอให้การประมวลผลของชุดทั้งหมดเสร็จสิ้น ดังนั้น ด้วยการเคลื่อนไหวแบบขนานของชุดชิ้นส่วนในแต่ละสถานที่ทำงาน การดำเนินการต่างๆ จะดำเนินการพร้อมกันในส่วนต่างๆ ของชุดเดียวกัน

ระยะเวลาของการประมวลผลแบบกลุ่มที่มีการเคลื่อนที่แบบคู่ขนานของผลิตภัณฑ์ลดลงอย่างรวดเร็ว:

ดล .

ที่ไหน น น- จำนวนชิ้นส่วนใน ชุดโอน(การขนส่งสินค้า) กล่าวคือ จำนวนผลิตภัณฑ์ที่โอนจากการดำเนินการหนึ่งไปยังอีกการดำเนินการหนึ่งพร้อมกัน

Dl - รอบการทำงานที่ยาวที่สุด

ด้วยการเปิดตัวชุดผลิตภัณฑ์แบบคู่ขนานกัน ชิ้นส่วนของทั้งชุดจะได้รับการประมวลผลอย่างต่อเนื่องเฉพาะในสถานที่ทำงานที่มีการดำเนินการที่ยาวนานตามหลังการดำเนินการสั้นๆ ในกรณีที่การดำเนินการสั้น ๆ เป็นไปตามการดำเนินการที่ยาวนาน เช่น อีกต่อไป (ในตัวอย่างของเรา - การดำเนินการที่สาม) การดำเนินการเหล่านี้จะดำเนินการเป็นระยะ ๆ เช่น อุปกรณ์ที่ไม่ได้ใช้งาน ที่นี่ไม่สามารถประมวลผลชุดของชิ้นส่วนได้ทันที โดยไม่ชักช้า เนื่องจากการดำเนินการก่อนหน้า (แบบยาว) ไม่อนุญาต

ในตัวอย่างของเรา: NS= 5, NS 1 = 10; NS 2 = 20; NS 3 = 10; NS 4 = 30; กับ= 1.

NSไอน้ำ = 1 (10 + 20 + 10 + 30) + (5-1) 30 = 70 + 120 = 190 นาที

พิจารณาโครงร่างการเคลื่อนที่แบบขนานของชิ้นส่วน (รูปที่ 2):

รูปที่ 2

สาม... เพื่อขจัดการหยุดชะงักในการประมวลผลแต่ละส่วนของแบทช์ในการดำเนินการทั้งหมด ใช้ ขนาน-อนุกรมหรือ ผสมวิธีการเริ่มต้นซึ่งชิ้นส่วน (หลังจากการประมวลผล) จะถูกโอนไปยังการดำเนินการถัดไปทีละรายการหรือในรูปแบบของ "การขนส่ง" ค้าง (หลายชิ้นในแต่ละครั้ง) ในลักษณะที่การดำเนินการเป็น ไม่ถูกขัดจังหวะในสถานที่ทำงานใดๆ ในวิธีผสม ความต่อเนื่องของการประมวลผลจะถูกนำมาจากวิธีตามลำดับ และจากวิธีคู่ขนาน การเปลี่ยนชิ้นส่วนจากการดำเนินการเป็นการดำเนินการทันทีหลังจากการประมวลผล ด้วยวิธีการผสมของการเปิดตัวสู่การผลิต รอบเวลาจะถูกกำหนดโดยสูตร

คอร์ .

ที่คร. - รอบการทำงานที่สั้นที่สุด (ของการดำเนินการที่อยู่ติดกันแต่ละคู่)

NS-1จำนวนการจัดตำแหน่ง

หากการดำเนินการที่ตามมายาวกว่าการดำเนินการก่อนหน้า หรือเท่ากับในเวลา การดำเนินการนี้จะเริ่มต้นทีละรายการทันทีหลังจากประมวลผลส่วนแรกในการดำเนินการก่อนหน้า ในทางตรงกันข้าม หากการดำเนินการที่ตามมาสั้นกว่าครั้งก่อน แสดงว่ามีช่องว่างในการโอนทีละชิ้น เพื่อป้องกันไม่ให้พวกเขาสะสมสำรองการขนส่งในปริมาณดังกล่าวซึ่งเพียงพอสำหรับการทำงานในการดำเนินการในภายหลัง ในการค้นหาจุดนี้บนกราฟในทางปฏิบัติ จำเป็นต้องโอนรายละเอียดสุดท้ายของชุดงานและเลื่อนระยะเวลาการดำเนินการไปทางขวา เวลาในการประมวลผลสำหรับส่วนอื่นๆ ของชุดงานจะถูกพล็อตไปทางซ้ายในกราฟ จุดเริ่มต้นของการประมวลผลในส่วนแรกจะแสดงช่วงเวลาที่ควรโอนสำรองการขนส่งจากการดำเนินการก่อนหน้าไปยังการดำเนินการนี้

หากการดำเนินการที่อยู่ติดกันมีระยะเวลาเท่ากัน จะมีเพียงหนึ่งการดำเนินการเท่านั้นที่ได้รับการยอมรับว่าสั้นหรือยาว (รูปที่ 3)

รูปที่ 3

NSไอน้ำสุดท้าย = 5 (10 + 20 + 10 + 30) - (5-1) (10 + 10 + 10) = 350-120 = 230 นาที

วิธีหลักในการลดระยะเวลาของวงจรการผลิตคือ:

1) การลดความเข้มแรงงานของผลิตภัณฑ์การผลิตโดยการปรับปรุงความสามารถในการผลิตของโครงสร้างที่ผลิตขึ้น การใช้คอมพิวเตอร์ การแนะนำกระบวนการทางเทคโนโลยีขั้นสูง

2) องค์กรที่มีเหตุผล กระบวนการแรงงานการจัดและบำรุงรักษาสถานที่ทำงานบนพื้นฐานของความเชี่ยวชาญและความร่วมมือ การใช้เครื่องจักรที่กว้างขวางและระบบอัตโนมัติของการผลิต

3) ลดการหยุดชะงักของการทำงานทั้งที่วางแผนไว้และไม่ได้วางแผนไว้โดยใช้หลักการอย่างมีเหตุผล องค์กรวิทยาศาสตร์กระบวนการผลิต

4) การเร่งความเร็วของปฏิกิริยาอันเป็นผลมาจากความดันที่เพิ่มขึ้น อุณหภูมิ การเปลี่ยนผ่านไปสู่กระบวนการต่อเนื่อง เป็นต้น

5) การปรับปรุงกระบวนการขนส่ง การจัดเก็บ และการควบคุม และการทับซ้อนกันในเวลากับกระบวนการแปรรูปและการประกอบ

การลดระยะเวลาของวงจรการผลิตเป็นหนึ่งในงานที่จริงจังของการจัดการการผลิตเพราะ ส่งผลกระทบต่อการหมุนเวียน เงินทุนหมุนเวียน, ลดต้นทุนแรงงาน, ลดพื้นที่จัดเก็บ, ความจำเป็นในการขนส่ง ฯลฯ

งาน

1 กำหนดระยะเวลาของวงจรการประมวลผล 50 ส่วนในประเภทการเคลื่อนไหวแบบต่อเนื่อง ขนาน และต่อเนื่องขนานกันในกระบวนการผลิต การประมวลผลชิ้นส่วนประกอบด้วยการดำเนินการห้าครั้ง โดยมีระยะเวลาต่ำสุดตามลำดับ: NS 1 =2; NS 2 =3; NS 3 =4; NS 4 =1; NS 5 = 3 การดำเนินการที่สองดำเนินการบนเครื่องสองเครื่อง และอีกเครื่องหนึ่งดำเนินการในเครื่องเดียว ขนาดของชุดโอนคือ 4 ชิ้น

2 กำหนดระยะเวลาของวงจรการประมวลผล 50 ส่วนด้วยการเคลื่อนไหวแบบต่อเนื่อง ขนาน และต่อเนื่องขนานกันในกระบวนการผลิต การประมวลผลของชิ้นส่วนประกอบด้วยการดำเนินการสี่ครั้ง โดยมีระยะเวลาต่ำสุดตามลำดับ: NS 1 =1; NS 2 =4; NS 3 =2; NS 4 = 6 การดำเนินการที่สี่ดำเนินการบนเครื่องสองเครื่อง และดำเนินการแต่ละเครื่องในเครื่องเดียว ขนาดของชุดโอนคือ 5 ชิ้น

3 ชุดชิ้นส่วนจำนวน 200 ชิ้นได้รับการประมวลผลโดยการเคลื่อนไหวแบบขนานกันในกระบวนการผลิต การประมวลผลของชิ้นส่วนประกอบด้วยการดำเนินการ 6 ครั้ง โดยมีระยะเวลาขั้นต่ำตามลำดับ: NS 1 =8; NS 2 =3; NS 3 =27; NS 4 =6; NS 5 =4; NS 6 = 20. การดำเนินการครั้งที่สามดำเนินการบนเครื่องสามเครื่อง เครื่องที่หกต่อเครื่องสอง และการดำเนินการอื่นๆ แต่ละรายการจะดำเนินการในเครื่องเดียว กำหนดว่ารอบเวลาการประมวลผลสำหรับชุดชิ้นส่วนจะเปลี่ยนไปอย่างไร หากตัวแปรการเคลื่อนไหวตามลำดับคู่ขนานในการผลิตถูกแทนที่ด้วยตัวแปรคู่ขนาน ขนาดของชุดโอนคือ 20 ชิ้น

4 ชุด 300 ชิ้นถูกประมวลผลโดยการเคลื่อนไหวแบบขนานกันในกระบวนการผลิต การประมวลผลชิ้นส่วนประกอบด้วยการดำเนินการเจ็ดครั้ง โดยมีระยะเวลาต่ำสุดตามลำดับ: NS 1 =4; NS 2 =5; NS 3 =7; NS 4 =3; NS 5 =4; NS 6 =5; NS 7 = 6 การดำเนินการแต่ละครั้งจะดำเนินการในเครื่องเดียว ชุดโอน - 30 ชิ้น อันเป็นผลมาจากเทคโนโลยีการผลิตที่ได้รับการปรับปรุง ระยะเวลาของการดำเนินการที่สามลดลง 3 นาที ครั้งที่ 7 - 2 นาที กำหนดว่าวัฏจักรชุดงานเปลี่ยนแปลงอย่างไร

5 ให้ชุดช่องว่างประกอบด้วย 5 ชิ้น แบทช์ถูกส่งผ่าน 4 การดำเนินการ: ระยะเวลาของครั้งแรกคือ 10 นาที ครั้งที่สองคือ 20 นาที ครั้งที่สามคือ 10 นาที และครั้งที่สี่คือ 30 นาที กำหนดระยะเวลาของวัฏจักรโดยใช้วิธีการวิเคราะห์และกราฟิกสำหรับการเคลื่อนไหวตามลำดับ

6 ให้ชุดช่องว่างประกอบด้วยสี่ชิ้น แบทช์ถูกส่งผ่าน 4 การดำเนินการ: ระยะเวลาของครั้งแรกคือ 5 นาที ครั้งที่สองคือ 10 นาที ครั้งที่สามคือ 5 นาที และครั้งที่สี่คือ 15 นาที กำหนดเวลารอบในการวิเคราะห์และแบบกราฟิกด้วยการเคลื่อนไหวแบบคู่ขนาน

7 ให้ชุดว่าง จำนวน 5 ชิ้น แบทช์ถูกส่งผ่าน 4 การดำเนินการ: ระยะเวลาของครั้งแรกคือ 10 นาที ครั้งที่สองคือ 20 นาที ครั้งที่สามคือ 10 นาที และครั้งที่สี่คือ 30 นาที กำหนดระยะเวลาของวัฏจักรโดยใช้วิธีการวิเคราะห์และแบบกราฟิกสำหรับการเคลื่อนไหวแบบต่อเนื่อง-คู่ขนาน

8 กำหนดระยะเวลาของวงจรเทคโนโลยีของการประมวลผลชุดละ 180 ชิ้น ด้วยการเคลื่อนไหวแบบขนานและต่อเนื่อง สร้างกราฟการประมวลผล ขนาดของชุดโอน - 30 ชิ้น บรรทัดฐานของเวลาและจำนวนงานในการดำเนินงานมีดังนี้

ทุกอย่างที่อธิบายในหลายๆ ส่วนก่อนหน้านี้ เน้นไปที่การทำวิจัยเพิ่มเติมเกี่ยวกับปัญหาของเวลาในกระบวนการที่แท้จริงและในระดับที่น้อยกว่ามากในการใช้งานจริง เพื่อเติมเต็มช่องว่างนี้ ให้เราร่างวิธีการหนึ่งวิธีในการคำนวณเวลาที่เหมาะสมของกระบวนการโดยพิจารณาจากข้อมูลทางสถิติเกี่ยวกับวิวัฒนาการ

พิจารณากระบวนการหนึ่งมิติ ซึ่งสถานะนั้นถูกกำหนดโดยตัวแปรจริง x สมมติว่าการสังเกตพลวัตของกระบวนการดำเนินการในเวลาทางดาราศาสตร์ เสื้อ ดังนั้น t = tk และ x = xk, k = 1, ..., n เป็นเวลาการสังเกตคงที่และค่าที่สอดคล้องกันของสถานะของ กระบวนการ. มีวิธีการทางคณิตศาสตร์ที่แตกต่างกันมากมายที่อนุญาตให้สร้างเส้นโค้งที่ผ่านจุด (t k, Xk) หรือเข้าใกล้ด้วย "วิธีที่ดีที่สุด" ฟังก์ชันผลลัพธ์ x = x (t) เกิดขึ้นในจิตใจของเรา รู้สึกว่ากระบวนการที่กำลังพิจารณาขึ้นอยู่กับการเคลื่อนที่เชิงกลของเทห์ฟากฟ้า และด้วยเหตุนี้ สถานะของมันจึงแสดงผ่านเวลาทางดาราศาสตร์ t ข้อสรุปดังกล่าวสามารถนำมาพิจารณาได้ ถ้าไม่มีปัญหาอย่างต่อเนื่องในการพยายามทำนายกระบวนการต่อไป สำหรับกระบวนการต่างๆ จำนวนมากที่ไม่เกี่ยวข้องโดยตรงกับการเคลื่อนที่เชิงกลของวัตถุท้องฟ้า การคาดคะเนเชิงทฤษฎีที่ได้รับโดยใช้ฟังก์ชัน x = x (t) นอกช่วงการสังเกตเริ่มเบี่ยงเบนไปอย่างมากจากข้อมูลการทดลองที่ตามมา สาเหตุของความคลาดเคลื่อนระหว่างทฤษฎีและการทดลองมักจะพยายามอธิบายโดยวิธีการประมวลผลที่เลือกไม่ประสบผลสำเร็จ แต่สาระสำคัญของเรื่องอาจไม่อยู่ในสิ่งนี้

กระบวนการที่เราสนใจเกิดขึ้นในจักรวาล แน่นอนว่าเขา "รู้สึก" ถึงผลกระทบของการเคลื่อนไหวของเทห์ฟากฟ้า อย่างไรก็ตาม ผลกระทบนี้อาจ "ไม่รุนแรง" ไม่ได้กำหนดไว้ โดยเฉพาะอย่างยิ่งสิ่งนี้สามารถแสดงออกได้ในความจริงที่ว่าในช่วงเวลาหนึ่งของการไหลของเวลาทางดาราศาสตร์สถานะของกระบวนการยังคงไม่เปลี่ยนแปลง ให้เรานึกถึงตัวอย่างที่ให้ไว้ก่อนหน้านี้กับห้องว่างที่ปิดสนิทซึ่งแยกจากโลกภายนอก ปล่อยให้เรามีชีวิตอยู่เพียงคนเดียวบินเข้าไปในห้อง ภายในสองสามวัน การเปลี่ยนแปลงในสถานะของระบบแมลงวันจะขึ้นอยู่กับการเคลื่อนที่ของแมลงวัน เนื่องจากการเปลี่ยนแปลงในสถานะของบ้านไม่อาจคาดเดาได้ ในเวลาเดียวกัน เป็นการยากที่จะจินตนาการว่าพฤติกรรมของแมลงวันนั้นเชื่อมโยงกับช่วงเวลาทางดาราศาสตร์อย่างเข้มงวด

เมื่อพูดนอกเรื่องยาวแล้วเรามาดูคำอธิบายอัลกอริธึมเพื่อคำนวณเวลาที่เหมาะสมของกระบวนการ

ในอัลกอริธึมนี้ หน่วยของการคำนวณค่าสูงสุดของท้องถิ่นจะถูกเลือกเป็นการวัดเวลาตามธรรมชาติ นอกจากนี้ส่วนที่เป็นไปได้ของสถานะคงที่ของกระบวนการจะถูกนำมาพิจารณาซึ่งตามที่ระบุไว้ก่อนหน้านี้เวลาที่เหมาะสมจะหยุดลง เนื่องจากเราสามารถพูดถึงเอกลักษณ์ของทั้งสองสถานะได้ภายในขอบเขตของความแม่นยำในการวัดเท่านั้น ดังนั้นจำนวนบวก e จะถูกใช้ในอนาคต ซึ่งเป็นข้อผิดพลาดในการวัดที่อนุญาต

ดังนั้น ข้อมูลอินพุตสำหรับอัลกอริทึมจึงเป็นตัวเลขธรรมชาติ n, จำนวนบวก 8, อาร์เรย์ (tk) และ (xk), k = 1, ..., n เพื่อความสะดวกในการเขียนโปรแกรม รูปแบบของโมดูลที่ดำเนินการตามลำดับสี่โมดูล

โมดูล 1,ใช้ข้อมูล n, e, tk), (xk) ในกรณีทั่วไปสร้างอาร์เรย์ใหม่ 7 = (7+ X = (X t) และอาร์เรย์ประกอบที่เฉพาะเจาะจงมาก P = (?) โดยที่ 1 = 1, .., t, และ t<Сп. Основное назначение этого модуля -- выявление в массиве x k) последовательностей идентичных состояний процесса, сохранение первых элементов в таких последовательностях и удаление всех остальных и, наконец, уменьшение по определенному, правилу исходного интервала наблюдения от t до на сумму тех промежутков времени, в которых процесс протекает стационарно.

โมดูล 1 ประกอบด้วยขั้นตอนต่อไปนี้:

p: = 1, m: = 0, k: = 1

ในหน้า p.p. 1, 2 แนะนำตัวนับที่มีค่าเริ่มต้นเฉพาะ:

ในหน้า p.p. 3, 4, ค่าตัวนับเพิ่มขึ้น 1

ตรวจสอบเงื่อนไข k ^ n ถ้าพอใจก็ไปข้อ 6 ไม่ก็ข้อ 11

ตรวจสอบความไม่เท่าเทียมกัน x k --x k = e หากยังมีอยู่ ให้ไปที่ข้อ 7 ไม่เช่นนั้น ให้ไปที่ข้อ 9

7.tii = ti - (tkl - tk), i = k1, ..., p.

ขั้นตอนนี้หมายความว่าหากค่าของ Xk และ Xk 1 ไม่สามารถแยกแยะได้ภายในข้อผิดพลาด เวลาทั้งหมดเริ่มต้นจาก tk จะลดลงตามจำนวน tki-tk

พี = พี กลับไปที่ข้อ 4

ทีวี = t k; X v: = x k; p = p v = v + l. เช่น องค์ประกอบของอาร์เรย์ T, X, P ถูกสร้างขึ้นและกำหนดค่าถัดไป v

  • 10. ใช้ (t k, ..., t n AND (Xk, - X n) เป็นอาร์เรย์เริ่มต้นของมิติ n - k 1 + 1 แล้วกลับไปที่รายการที่ 2
  • 11. พิมพ์ m, (T), (X,) และ (P,) โดยที่ i = l, ..., m. End

ให้เราอธิบายความหมายขององค์ประกอบของอาร์เรย์ที่ประกอบกัน P จากข้อความก่อนหน้า ค่าของ pk เท่ากับจำนวนขององค์ประกอบเหล่านั้นของอาร์เรย์ (xk) ที่ตามมาทันที และแตกต่างจาก x pi + .. +, +, โดยน้อยกว่า e. โปรดทราบว่า pi + ... + pm = n.

ตัวอย่างที่ 1 ให้: n = 20, (/ *) = (2, 4, 7, 10, 12, 13, 15, 17, 20, 22, 24, 25,

  • 27, 30, 32, 33, 34, 35, 36) และ (x,) = (4, 4, 6, 6, 6, 3, 2, 4, 3, 3, 3, 2, 2, 4, 5 , 5,
  • 5, 4, 3) ดูรูปที่ 9, ก.

จากโมดูล 1 เราได้ m = 11

(G) = (2, 3, 4, 6, 8, 11, 1-2, 15, 17, 18, 19); (X,) = (4, 6, 3, 2, 4, 3, 2, 4,5,4,3)

และ (d.) = (2, 4, 1, 1, 1.3, 2, 1.3, 1, 1) ดูรูปที่ 9, ข.

โมดูล 2ข้อมูลที่ป้อนเป็นตัวเลขธรรมชาติ m เช่นเดียวกับอาร์เรย์ (7+ (XL), = 1, ..., t โมดูลนี้ในอาร์เรย์ (TJ แสดงช่วงเวลา [TM a], 1 = 1 เมตร (มล

ตัวอย่างที่ 2 ค่า m, (T b) และ (X,] ยืมมาจากตัวอย่างก่อนหน้า หลังจากเรียกใช้โมดูล 2 เราจะได้ ml = 3, m2 = 8, (U,) = (3, 8, 17), (T *) = (3, 4, 6, 8, 11, 12, 15, 17) ดูรูปที่ 9, b.

โมดูล 3ป้อนข้อมูล ml, m2, (TM n), 1 = 1, ..., ml, (T *), / 2 = 1, ..., rn2

โมดูลนี้ออกแบบมาเพื่อสร้างอาร์เรย์ (m (-g) โดยสูตร

ที่ทีวี 6 [TMp, TMn + i]

ตัวแปร m คือเวลาที่สร้างขึ้นโดยการเปลี่ยนแปลงในตัวแปร x การวัดตามธรรมชาติของมันคือหน่วยสูงสุดในท้องถิ่น

ตัวอย่างที่ 3 ข้อมูลเริ่มต้นสำหรับ Т 2) เหมือนกับค่า ml, m2 ITM และในตัวอย่างที่ 2.. หลังจากการคำนวณที่เหมาะสม เราจะได้ N = (0; 0.2; 0.6; 1; 1,33; 1,78; 2).

โมดูล 4กำหนดรูปแบบผลลัพธ์ของผลลัพธ์โดยสร้างการติดต่อระหว่างค่าของ m และองค์ประกอบของ x จากอาร์เรย์ (xk)

ตัวอย่างที่ 4 จากข้อมูลของตัวอย่างที่ 2 และ 3 ได้ผลลัพธ์ต่อไปนี้ ดูรูปที่ 9 ใน:

เสื้อ: 0; 0.2; 0.6; 1; 1.33; 1.44;

x: 6; 3; 2; 4; 3T 0 2;

ดังนั้นอัลกอริธึมที่พิจารณาแล้วทำให้สามารถพัฒนาแนวคิดเรื่องเวลาที่เหมาะสมของกระบวนการโดยพิจารณาจากข้อมูลเกี่ยวกับการเปลี่ยนแปลงสถานะของกระบวนการที่บันทึกไว้ในมาตราส่วนเวลาทางดาราศาสตร์ ค่อนข้างชัดเจนว่าคุณสามารถใช้อัลกอริธึมอื่น ๆ ตามตัวอย่างเช่นในการคำนวณลำดับของค่าต่ำสุดในพื้นที่หรือลำดับผสมที่ประกอบด้วยค่าสูงสุดและค่าต่ำสุดในพื้นที่ ในการประมวลผลข้อมูลทดลอง คุณควรลองใช้ตัวเลือกอื่น หากด้วยเหตุผลบางอย่าง ผู้ทดลองเลือกช่วงเวลาที่เหมาะสมอย่างใดอย่างหนึ่งและรับอาร์เรย์ (m4 และ (xk) ในเวลาเดียวกัน ในขั้นต่อไป เขาควรใช้วิธีการทางคณิตศาสตร์บางอย่างเพื่อประมาณจุดทดลอง (m *, x) ) เส้นโลกโดยประมาณของกระบวนการ x = x (t) โดยการอนุมานเส้นนี้เกินช่วงการสังเกตเริ่มต้น เขาสามารถคาดการณ์เกี่ยวกับเส้นทางต่อไปของกระบวนการได้

เป็นเรื่องที่น่าสนใจที่จะกล่าวถึงการทดลองทางคอมพิวเตอร์ที่ออกแบบมาเพื่อประเมินโอกาสในการใช้อัลกอริทึมที่เสนอ ข้อมูลการไหลบ่าของแม่น้ำประจำปีได้รับเลือกให้เป็นข้อมูลในการทดลอง Vakhsh (ทาจิกิสถาน) เมื่อ 40 ปีก่อน ในช่วงเวลาเดียวกัน ข้อมูลเกี่ยวกับพลวัตของหมายเลข Wolf ซึ่งเป็นดัชนีอินทิกรัลของกิจกรรมสุริยะที่ใช้บ่อยที่สุด หลังเป็นพื้นฐานสำหรับการพัฒนาเวลาที่เหมาะสมของกระบวนการกิจกรรมสุริยะ เมื่อถึงเวลาใหม่ ข้อมูลเกี่ยวกับค่าใช้จ่ายของแม่น้ำก็เปลี่ยนไป Vakhsh และหลังจากนั้น ในช่วงระยะเวลาการสังเกต การพึ่งพาทางทฤษฎีของอัตราการไหลของน้ำถูกกำหนดให้เป็นหน้าที่ของเวลาที่เหมาะสมของกิจกรรมสุริยะ คุณลักษณะเฉพาะของกำหนดการที่เป็นผลลัพธ์คือลักษณะการทำงานที่เกือบจะเป็นช่วงๆ ของต้นทุนสูงสุดและต่ำสุด อย่างไรก็ตาม ต้นทุนไม่คงที่

(เวลาจากการทำงานเปิดอยู่จนกว่าจะเสร็จสิ้นในกรณีของกิจกรรมเป็นระยะหรือจนกว่าระบบจะตอบสนองด้วยมือของการออกครั้งแรกของผู้ใช้ในกรณีของกิจกรรมแบบโต้ตอบ) หรือการขยายสูงสุด ความยุติธรรม(จำนวนเวลาของตัวประมวลผลที่เท่ากันสำหรับแต่ละกระบวนการ หรือโดยทั่วไปแล้ว จุดที่สอดคล้องกันในเวลาตามลำดับความสำคัญและปริมาณงานของแต่ละกระบวนการ) ในทางปฏิบัติ เป้าหมายเหล่านี้มักจะไม่ตรงกัน (เช่น ปริมาณงานกับเวลาแฝง) ดังนั้นตัวจัดกำหนดการจะทำการแลกเปลี่ยนที่เหมาะสม การตั้งค่าวัดจากปัญหาใดปัญหาหนึ่งที่กล่าวถึงข้างต้น ขึ้นอยู่กับความต้องการและงานของผู้ใช้

OS / 360 และผู้สืบทอด

เอกซ์

ใน AIX เวอร์ชัน 4 มีความหมายที่เป็นไปได้สามประการสำหรับนโยบายการกำหนดตารางเวลาของเธรด:

  • อย่างแรก อันแรกออกมา: หลังจากกำหนดเวลาเธรดที่มีนโยบายนี้แล้ว เธรดจะถูกดำเนินการจนเสร็จสิ้น หากไม่ได้บล็อก เธรดจะยกเลิกการควบคุมโปรเซสเซอร์โดยสมัครใจ หรือการจัดส่งจะมีลำดับความสำคัญของเธรดที่สูงกว่า เฉพาะสตรีมที่มีลำดับความสำคัญคงที่เท่านั้นที่สามารถมีนโยบายการจัดกำหนดการ FIFO
  • Round Robin: สิ่งนี้คล้ายกับตัวกำหนดตารางเวลาสกีมา AIX เวอร์ชัน 3 ในรูปแบบโรบินแบบวนโดยอิงตามการแบ่งเวลา 10 มิลลิวินาที เมื่อเธรด PP มีการควบคุมที่ส่วนท้ายของช่วงเวลา เธรดจะย้ายไปที่ส่วนท้ายของคิวเธรดที่มีลำดับความสำคัญเท่ากัน เฉพาะเธรดที่มีลำดับความสำคัญคงที่เท่านั้นที่สามารถมีนโยบายการจัดกำหนดการ Round Robin
  • อื่นๆ: นโยบายนี้กำหนดโดย POSIX1003.4a ในการใช้งาน ใน AIX เวอร์ชัน 4 นโยบายนี้ถูกกำหนดให้เทียบเท่ากับ RR ยกเว้นว่าใช้กับเธรดที่มีลำดับความสำคัญที่ไม่คงที่ การคำนวณค่าลำดับความสำคัญของเธรดที่รันต่ออินเตอร์รัปต์ใหม่หมายความว่าเธรดอาจสูญเสียการควบคุมเนื่องจากค่าลำดับความสำคัญของเธรดนั้นสูงกว่าเธรดอื่น นี่คือลักษณะการทำงานของ AIX เวอร์ชัน 3

เธรดเป็นที่สนใจของแอปพลิเคชันที่ประกอบด้วยกระบวนการอะซิงโครนัสหลายขั้นตอนเป็นหลัก แอปพลิเคชันเหล่านี้สามารถกำหนดให้ระบบมีภาระงานเพียงเล็กน้อย หากแปลงเป็นโครงสร้างแบบมัลติเธรด

AIX 5 ใช้นโยบายการจัดกำหนดการต่อไปนี้: FIFO, pivot และ fair pivot นโยบาย FIFO ประกอบด้วยการใช้งานที่แตกต่างกันสามแบบ: FIFO, FIFO2 และ FIFO3 นโยบาย Round robin เรียกว่า SCHED_RR บน AIX และ robin ที่ยุติธรรมเรียกว่า SCHED_OTHER

ลินุกซ์

ลินุกซ์ 2.4

Brain Fuck Scheduler (BFS) ซึ่งสร้างโดย Colivas เป็นทางเลือกแทน CFS

FreeBSD

FreeBSD ใช้คิวความคิดเห็นแบบแบ่งชั้นด้วยลำดับความสำคัญตั้งแต่ 0-255 0-63 สงวนไว้สำหรับการขัดจังหวะ 64-127 สำหรับครึ่งบนของเคอร์เนล 128-159 สำหรับเธรดผู้ใช้แบบเรียลไทม์ 160-223 สำหรับการแบ่งปันเวลาสำหรับเธรดของผู้ใช้ และ 224-255 สำหรับเธรดผู้ใช้ที่ไม่ได้ใช้งาน เช่นเดียวกับ Linux จะใช้การตั้งค่าคิวที่ใช้งานอยู่ แต่ก็มีคิวที่ไม่ได้ใช้งานด้วยเช่นกัน

เวอร์ชันสวิตช์ของอัลกอริธึมก่อนหน้าคืออัลกอริธึมเวลาที่เหลืออยู่น้อยที่สุด ตามอัลกอริทึมนี้ ตัวจัดกำหนดการจะเลือกกระบวนการที่มีเวลาดำเนินการเหลือน้อยที่สุดในแต่ละครั้ง ในกรณีนี้ จำเป็นต้องทราบเวลาดำเนินการของงานล่วงหน้าด้วย เมื่อมีงานใหม่มาถึง เวลาดำเนินการทั้งหมดจะถูกเปรียบเทียบกับเวลาดำเนินการที่เหลืออยู่ของงานปัจจุบัน ถ้าเวลาดำเนินการของงานใหม่สั้นลง กระบวนการปัจจุบันจะถูกระงับและการควบคุมจะถูกโอนไปยังงานใหม่ รูปแบบนี้ช่วยให้คุณให้บริการคำขอสั้น ๆ ได้อย่างรวดเร็ว

การวางแผนสามชั้น

ระบบแบทช์ช่วยให้คุณสามารถใช้การวางแผนสามระดับได้ดังแสดงในรูป เมื่องานใหม่เข้าสู่ระบบ งานเหล่านี้จะถูกวางไว้ในคิวที่จัดเก็บไว้ในดิสก์ก่อน ทางเข้า วางแผนการเข้าถึง เลือกงานแล้วโอนเข้าระบบ งานที่เหลือยังคงอยู่ในคิว

ทันทีที่งานเข้าสู่ระบบ กระบวนการที่เกี่ยวข้องจะถูกสร้างขึ้น และสามารถเข้าสู่การต่อสู้เพื่อเข้าถึงตัวประมวลผลได้ทันที อย่างไรก็ตาม สถานการณ์อาจเกิดขึ้นได้เมื่อมีกระบวนการมากเกินไปและกระบวนการทั้งหมดไม่พอดีกับหน่วยความจำ จากนั้นบางส่วนจะถูกเพจออกไปยังดิสก์ ระดับที่สองของการจัดตารางเวลากำหนดว่ากระบวนการใดสามารถเก็บไว้ในหน่วยความจำและสามารถจัดเก็บบนดิสก์ได้ เสร็จเรียบร้อย ตัวกำหนดตารางเวลาหน่วยความจำ .

ตัวจัดกำหนดการหน่วยความจำจะตรวจสอบกระบวนการบนดิสก์เป็นระยะเพื่อตัดสินใจว่าจะย้ายไปยังหน่วยความจำใด ในบรรดาเกณฑ์ที่ใช้โดยผู้วางแผนมีดังต่อไปนี้:

1. นานแค่ไหนแล้วที่กระบวนการถูกฟลัชไปยังดิสก์หรือโหลดจากดิสก์?

2. กระบวนการนี้ใช้โปรเซสเซอร์มานานแค่ไหนแล้ว?

3. ขนาดของกระบวนการคือเท่าไร (กระบวนการเล็กไม่รบกวน)?

4. กระบวนการมีความสำคัญอย่างไร?

ระดับที่สามของการจัดกำหนดการมีหน้าที่ในการเข้าถึงตัวประมวลผลสำหรับกระบวนการที่อยู่ในสถานะพร้อม เวลาพูดถึง "นักวางแผน" มักจะเป็น ตัวกำหนดตารางเวลาโปรเซสเซอร์ ... ตัวกำหนดตารางเวลานี้ใช้อัลกอริธึมที่เหมาะสมกับสถานการณ์ ไม่ว่าจะมีการหยุดชะงักหรือไม่ก็ตาม เราได้พิจารณาอัลกอริธึมเหล่านี้บางส่วนแล้ว และเราจะทำความคุ้นเคยกับอัลกอริธึมอื่นๆ

การวางแผนในระบบโต้ตอบ

การวางแผนวงจร

อัลกอริธึมที่เก่าแก่ที่สุด ง่ายที่สุด ยุติธรรม และใช้บ่อยที่สุดคืออัลกอริธึมการตั้งเวลาแบบวนซ้ำ แต่ละกระบวนการจะได้รับช่วงเวลาของตัวประมวลผลที่แน่นอน ซึ่งเรียกว่าไทม์สไลซ์ ถ้ากระบวนการยังคงทำงานอยู่เมื่อสิ้นสุดการแบ่งเวลา กระบวนการนั้นจะถูกยกเลิกและการควบคุมจะถูกโอนไปยังกระบวนการอื่น แน่นอน หากกระบวนการหยุดชะงักหรือออกก่อนกำหนด การเปลี่ยนแปลงการควบคุมจะเกิดขึ้นในขณะนั้น การใช้การจัดกำหนดการแบบวนซ้ำนั้นตรงไปตรงมา ตัวจัดกำหนดการเพียงต้องการเก็บรายการกระบวนการให้พร้อมเท่านั้น เมื่อกระบวนการถึงขีดจำกัดเวลา กระบวนการจะถูกส่งไปยังจุดสิ้นสุดของรายการ

จุดที่น่าสนใจเพียงอย่างเดียวของอัลกอริทึมนี้คือความยาวควอนตัม การเปลี่ยนจากกระบวนการหนึ่งไปอีกกระบวนการหนึ่งต้องใช้เวลา - คุณต้องบันทึกและโหลดรีจิสเตอร์และการ์ดหน่วยความจำ อัปเดตตารางและรายการ บันทึกและโหลดแคชหน่วยความจำใหม่ ฯลฯ ประสิทธิภาพ แต่ควอนตัมที่มีขนาดใหญ่เกินไปอาจส่งผลให้ตอบสนองช้าต่อการโต้ตอบสั้น ๆ แบบสอบถาม ค่าควอนตัมประมาณ 2 0 - 0 ms มักจะเป็นการประนีประนอมที่สมเหตุสมผล

การวางแผนลำดับความสำคัญ

ในอัลกอริธึมการตั้งเวลาแบบวนรอบ มีสมมติฐานที่สำคัญว่ากระบวนการทั้งหมดเท่าเทียมกัน ในสถานการณ์คอมพิวเตอร์ที่มีผู้ใช้จำนวนมาก อาจไม่เป็นเช่นนั้น ตัวอย่างเช่น ในมหาวิทยาลัย อย่างแรกเลย คณบดีควรทำหน้าที่ รองจากอาจารย์ เลขานุการ คนทำความสะอาด และเฉพาะนักศึกษาเท่านั้น ความจำเป็นที่ต้องคำนึงถึงปัจจัยภายนอกดังกล่าวนำไปสู่การวางแผนลำดับความสำคัญ แนวคิดพื้นฐานนั้นเรียบง่าย: แต่ละกระบวนการได้รับการกำหนดลำดับความสำคัญ และการควบคุมจะถูกโอนไปยังกระบวนการที่พร้อมใช้งานซึ่งมีลำดับความสำคัญสูงสุด

หลายคิว.

หนึ่งในตัวกำหนดตารางเวลาที่มีลำดับความสำคัญอันดับแรกถูกนำมาใช้ในระบบแบ่งเวลาที่เข้ากันได้ (CTSS) ปัญหาหลักของระบบ CTSS คือการสลับกระบวนการช้าเกินไป เนื่องจากมีเพียงหนึ่งกระบวนการในหน่วยความจำของคอมพิวเตอร์ IBM 7094 สวิตช์แต่ละตัวหมายถึงการทิ้งกระบวนการปัจจุบันไปที่ดิสก์

และอ่านกระบวนการใหม่จากดิสก์ นักพัฒนา CTSS ตระหนักได้อย่างรวดเร็วว่าประสิทธิภาพจะดีกว่านี้หากกระบวนการ ซึ่งถูกจำกัดโดยความสามารถของโปรเซสเซอร์ ได้รับการจัดสรรเวลาที่ใหญ่กว่าหากได้รับชิ้นส่วนเล็กๆ แต่บ่อยครั้ง ในอีกด้านหนึ่ง สิ่งนี้จะลดจำนวนการสลับจากหน่วยความจำไปยังดิสก์ และในอีกด้านหนึ่ง จะทำให้เวลาตอบสนองลดลง ดังที่เราได้เห็นแล้ว

เป็นผลให้มีการพัฒนาโซลูชันที่มีคลาสลำดับความสำคัญ กระบวนการของคลาสที่มีลำดับความสำคัญสูงสุดได้รับการจัดสรรหนึ่งควอนตัม, กระบวนการของคลาสถัดไป - สองควอนตัม, ถัดไป - สี่ควอนตัมและอื่น ๆ เมื่อกระบวนการหมดเวลาที่จัดสรรไว้มันจะย้ายไปที่ ชั้นล่าง

ตัวอย่างเช่น ให้พิจารณากระบวนการที่ต้องทำการคำนวณมากกว่า 100 ควอนตั้ม ขั้นแรกจะได้รับหนึ่งควอนตัมจากนั้นจะถูกสูบไปยังดิสก์ ครั้งหน้าจะได้ 2 quanta แล้ว 4, 8,16, 32, 64 ถึงแม้ว่าเขาจะใช้แค่ 37 จาก 64 ในกรณีนี้เขาจะต้องการแค่ 7 โอน (รวมโหลดเริ่มต้น) แทนที่จะเป็น 100 ซึ่งจะ ต้องใช้อัลกอริธึมแบบวงกลม นอกจากนี้ เมื่อคุณดำดิ่งลงไปในคิวลำดับความสำคัญ กระบวนการจะเริ่มน้อยลงและน้อยลง ปล่อยให้โปรเซสเซอร์ใช้กระบวนการที่สั้นลง

"กระบวนการที่สั้นที่สุดคือขั้นตอนต่อไป"

เนื่องจากอัลกอริธึม Shortest Task First ช่วยลดเวลาตอบสนองโดยเฉลี่ยในระบบประมวลผลแบบกลุ่ม เราจึงต้องการใช้ในระบบแบบโต้ตอบด้วยเช่นกัน เป็นไปได้ในระดับหนึ่ง กระบวนการโต้ตอบส่วนใหญ่มักเป็นไปตามรูปแบบของ "การรอคำสั่ง ดำเนินการคำสั่ง รอคำสั่ง ดำเนินการคำสั่ง ... " เมื่อพิจารณาการดำเนินการของแต่ละคำสั่งเป็นงานที่แยกจากกัน คุณสามารถย่อเวลาตอบสนองโดยเฉลี่ยโดยรวมให้เหลือน้อยที่สุดโดย เริ่มงานที่สั้นที่สุดก่อน ปัญหาเดียวคือ

ในการหาว่ากระบวนการใดที่รอดำเนินการสั้นที่สุด

วิธีการหนึ่งขึ้นอยู่กับการประเมินความยาวของกระบวนการโดยพิจารณาจากพฤติกรรมก่อนหน้าของกระบวนการ การดำเนินการนี้จะเริ่มต้นกระบวนการด้วยเวลาโดยประมาณที่สั้นที่สุด ให้เราสมมติว่าเวลาโดยประมาณของการดำเนินการคำสั่งคือ T 0 และเวลาโดยประมาณของการเปิดตัวครั้งต่อไปคือ T 1 คุณสามารถปรับปรุงการประมาณเวลาได้โดยนำผลรวมถ่วงน้ำหนักของคูณด้วย T 0 + (1 - a) T 1 ด้วยการเลือกค่าที่เหมาะสมสำหรับ a เราสามารถทำให้อัลกอริทึมการประเมินลืมอย่างรวดเร็วเกี่ยวกับการเปิดตัวครั้งก่อนๆ หรือในทางกลับกัน จดจำไว้เป็นเวลานาน รับ = 1/2 เราได้รับชุดค่าประมาณ:

T 0, T 0/2 + T 1/2, T 0/4 + T 1/4 + T 2/2, T 0/8 + T 1/8 + T 2/4 + T 3/2

หลังจากปล่อย 3 ครั้ง น้ำหนักของ T 0 ในการประมาณการจะลดลงเหลือ 1/8

วิธีการประมาณค่าถัดไปในชุดข้อมูลโดยใช้ค่าเฉลี่ยถ่วงน้ำหนักของค่าก่อนหน้าและการประมาณค่าก่อนหน้ามักเรียกว่าอายุ วิธีนี้ใช้ได้กับหลายสถานการณ์ที่ต้องมีการประเมินจากค่าก่อนหน้า วิธีที่ง่ายที่สุดในการตระหนักถึงความชราคือที่ = 1/2 ในทุกขั้นตอนคุณเพียงแค่ต้องการ

เพิ่มค่าใหม่ให้กับค่าประมาณปัจจุบันและลดผลรวมลงครึ่งหนึ่ง (โดยเลื่อนไปทางขวา 1 บิต)

รับประกันการวางแผน

แนวทางที่แตกต่างโดยพื้นฐานในการจัดตารางเวลาคือการให้คำมั่นสัญญาที่แท้จริงกับผู้ใช้แล้วดำเนินการตามนั้น นี่เป็นคำสัญญาหนึ่งที่ทำได้ง่ายและปฏิบัติตามได้ง่าย: หากผู้ใช้ n รายแชร์โปรเซสเซอร์กับคุณ คุณจะได้รับพลังประมวลผล 1 / n

และบนระบบที่มีผู้ใช้หนึ่งรายและโปรเซสเซอร์ที่ทำงานอยู่ n ตัว แต่ละตัวจะได้รับรอบโปรเซสเซอร์ 1 / n

เพื่อให้เป็นไปตามคำมั่นสัญญานี้ ระบบจะต้องติดตามการจัดสรร CPU ระหว่างกระบวนการต่างๆ นับตั้งแต่เวลาที่แต่ละกระบวนการถูกสร้างขึ้น จากนั้นระบบจะคำนวณจำนวนทรัพยากรตัวประมวลผลที่กระบวนการมีสิทธิได้รับ เช่น เวลาตั้งแต่สร้างหารด้วย n ตอนนี้คุณสามารถคำนวณอัตราส่วนของเวลาที่มอบให้กับกระบวนการต่อเวลาที่มีสิทธิได้รับ ค่าผลลัพธ์ 0.5 หมายความว่ากระบวนการได้รับการจัดสรรเพียงครึ่งหนึ่งของสิ่งที่ควรจะเป็น และ 2.0 หมายความว่ากระบวนการได้รับมากเป็นสองเท่าของที่ควร จากนั้นเริ่มกระบวนการด้วยอัตราส่วนที่เล็กที่สุดจนถึง

มันจะไม่ใหญ่กว่าเพื่อนบ้านที่ใกล้ที่สุด

วางแผนหวย.

อัลกอริทึมจะขึ้นอยู่กับการแจกจ่ายสลากลอตเตอรีไปยังกระบวนการเข้าถึงทรัพยากรต่างๆ รวมถึงตัวประมวลผล เมื่อผู้วางแผนจำเป็นต้องตัดสินใจ ตั๋วลอตเตอรีจะถูกสุ่มเลือก และผู้ถือตั๋วจะเข้าถึงทรัพยากรได้ ในแง่ของการเข้าถึง CPU "ลอตเตอรี" สามารถเกิดขึ้นได้ 50 ครั้งต่อวินาที และผู้ชนะจะได้รับเวลา CPU 20 มิลลิวินาที

กระบวนการที่สำคัญกว่านั้นสามารถให้ตั๋วเพิ่มเติมเพื่อเพิ่มโอกาสในการชนะ หากตั๋ว 100 ใบและ 20 ใบอยู่ในกระบวนการเดียว จะได้รับ 20% ของเวลาประมวลผล ต่างจากผู้วางแผนลำดับความสำคัญซึ่งเป็นเรื่องยากมากที่จะประมาณว่าลำดับความสำคัญ 40 หมายถึงอะไรในการวางแผนลอตเตอรีทุกอย่างชัดเจน แต่ละกระบวนการจะได้รับเปอร์เซ็นต์ของทรัพยากรโดยประมาณเท่ากับเปอร์เซ็นต์ของตั๋วที่มี

การวางแผนลอตเตอรีมีคุณสมบัติที่น่าสนใจหลายประการ ตัวอย่างเช่น หากกระบวนการได้รับตั๋วหลายใบในระหว่างการสร้าง ลอตเตอรีถัดไปโอกาสในการถูกรางวัลจะแปรผันตามจำนวนสลาก

กระบวนการโต้ตอบสามารถแลกเปลี่ยนตั๋วได้ตามต้องการ ดังนั้น หากกระบวนการของไคลเอ็นต์ส่งข้อความไปยังกระบวนการของเซิร์ฟเวอร์แล้วบล็อก ก็สามารถส่งต่อตั๋วทั้งหมดไปยังกระบวนการของเซิร์ฟเวอร์เพื่อเพิ่มโอกาสที่เซิร์ฟเวอร์จะเริ่มต้นได้ เมื่อออกจากกระบวนการของเซิร์ฟเวอร์ จะสามารถคืนตั๋วทั้งหมดกลับคืนมาได้

การวางแผนอย่างยุติธรรม

จนถึงตอนนี้ เราถือว่าทุกกระบวนการถูกควบคุมโดยไม่คำนึงว่าใครคือหัวหน้า ดังนั้น หากผู้ใช้ 1 สร้าง 9 โปรเซส และผู้ใช้ 2 สร้าง 1 โปรเซส จากนั้นใช้ cyclical scheduling หรือในกรณีที่มีลำดับความสำคัญเท่ากัน ผู้ใช้ 1 จะได้รับ 90% ของโปรเซสเซอร์ และผู้ใช้ 2 เพียง 10 เท่านั้น

เพื่อหลีกเลี่ยงสถานการณ์ดังกล่าว บางระบบให้ความสนใจกับเจ้าของกระบวนการก่อนกำหนดเวลา ในรุ่นนี้ ผู้ใช้แต่ละคนจะได้รับส่วนแบ่งของโปรเซสเซอร์ และผู้จัดกำหนดการจะเลือกกระบวนการตามข้อเท็จจริงนี้ หากในตัวอย่างของเรา ผู้ใช้แต่ละคนมี

สัญญา 50% ของโปรเซสเซอร์จะได้รับ จากนั้นพวกเขาจะได้รับ 50% ของโปรเซสเซอร์ โดยไม่คำนึงถึงจำนวนกระบวนการ

การจัดตารางเวลาในระบบเรียลไทม์

เวลามีบทบาทสำคัญในระบบเรียลไทม์ ส่วนใหญ่แล้ว อุปกรณ์ทางกายภาพภายนอกอย่างน้อยหนึ่งเครื่องจะสร้างสัญญาณอินพุต และคอมพิวเตอร์ต้องตอบสนองอย่างเพียงพอภายในระยะเวลาที่กำหนด

ระบบเรียลไทม์แบ่งออกเป็น ระบบเรียลไทม์อย่างหนัก ซึ่งหมายความว่ามีกำหนดเวลาที่แน่นสำหรับแต่ละงาน (ต้องเป็นไปตามนั้น) และ ระบบเรียลไทม์ที่ยืดหยุ่น ซึ่งการฝ่าฝืนกำหนดเวลาไม่เป็นที่พึงปรารถนา แต่ยอมรับได้ ในทั้งสองกรณี โปรแกรมแบ่งออกเป็นหลายขั้นตอน ซึ่งแต่ละกระบวนการสามารถคาดเดาได้ กระบวนการเหล่านี้มักสั้นและเสร็จสิ้นภายในไม่กี่วินาที เมื่อมีสัญญาณภายนอกปรากฏขึ้น ผู้วางแผนจะทำให้แน่ใจว่าตรงตามกำหนดเวลา

เหตุการณ์ภายนอกที่ระบบต้องตอบสนอง สามารถแบ่งออกเป็น เป็นระยะ(เกิดขึ้นเป็นระยะ) และ ไม่เป็นระยะ(เกิดขึ้นอย่างคาดไม่ถึง) อาจมีเหตุการณ์เป็นระยะๆ ที่ระบบต้องดำเนินการ ขึ้นอยู่กับเวลาที่ใช้ในการประมวลผลแต่ละเหตุการณ์ ระบบอาจไม่สามารถประมวลผลกิจกรรมทั้งหมดได้ทันท่วงที


ข้อมูลที่คล้ายกัน


บ่อยครั้ง นักพัฒนา โดยเฉพาะผู้ที่ไม่มีประสบการณ์ หลงทางเมื่อถูกขอให้กำหนดเวลาสำหรับงาน อย่างไรก็ตาม ความสามารถในการวางแผนเป็นทักษะที่มีประโยชน์และจำเป็นอย่างมาก ซึ่งไม่เพียงแต่ช่วยในการทำงาน แต่ยังรวมถึงในชีวิตด้วย เราตัดสินใจถามผู้เชี่ยวชาญว่าจะเรียนรู้วิธีวางแผนและส่งมอบโครงการให้ตรงเวลาได้อย่างไร

ข้อสรุปสั้น ๆ สามารถพบได้ที่ส่วนท้ายของบทความ

นักพัฒนามักจะต้องคำนึงถึงพารามิเตอร์หลายตัวพร้อมกันเพื่อประเมินเวลาดำเนินการงาน:

  1. ประสบการณ์ในการปฏิบัติงานดังกล่าวและการทำงานร่วมกับกองเทคโนโลยีนี้ หากคุณต้องทำสิ่งใหม่โดยพื้นฐาน คุณต้องระมัดระวังเป็นพิเศษกับการประเมิน
  2. ประสบการณ์กับลูกค้ารายนี้ เมื่อรู้จักลูกค้าแล้ว คุณสามารถคาดการณ์ข้อกำหนดเพิ่มเติมและจำนวนการแก้ไขโดยประมาณได้
  3. คุณภาพของรหัสในการทำงานด้วย นี่เป็นปัจจัยที่มีอิทธิพลมากที่สุด เนื่องจากทุกอย่างสามารถล่าช้าได้มากและโดยทั่วไปไม่เป็นไปตามแผน หากโปรเจ็กต์มีการทดสอบ ทุกที่ล้วนมีแต่การขึ้นต่อกันที่ชัดเจนและฟังก์ชันถูกแยกออกมาอย่างดี ทุกอย่างก็ไม่น่ากลัวนัก มันเลวร้ายกว่ามากหากคุณจัดการกับรหัสดั้งเดิมโดยไม่มีการทดสอบหรือกับรหัสที่อิ่มตัวด้วยการพึ่งพาโดยนัย สิ่งต่างๆ เช่น "ฟังก์ชันมหัศจรรย์" (เมื่อยากที่จะเห็นสแต็กการโทรสุดท้ายจากโค้ด) และการทำซ้ำโค้ด (เมื่อคุณต้องการแก้ไขส่วนอิสระหลายๆ ส่วนเพื่อเปลี่ยนฟังก์ชันการทำงานใดๆ) ก็อาจทำให้เรื่องยุ่งยากได้เช่นกัน

หากต้องการเรียนรู้วิธีประเมินเวลาทำงานอย่างเพียงพอ คุณต้องฝึกฝนอย่างต่อเนื่อง ในตอนเริ่มงาน ฉันทำสิ่งนี้ทั้งหมด: ฉันประมาณเวลาในการทำงานที่เข้ามาให้เสร็จ แม้ว่าจะไม่มีใครต้องการก็ตาม จากนั้นฉันก็ดูว่าฉันจัดการเพื่อประเมินได้อย่างแม่นยำเพียงใด ในกระบวนการทำงานให้เสร็จ ฉันสังเกตว่าการดำเนินการใดต้องใช้เวลามากกว่ากัน หากมีสิ่งใดเพิ่มระยะเวลาขึ้นอย่างมาก เขาจะจำช่วงเวลานี้และนำมาพิจารณาในการประเมินครั้งต่อไป

ในการประเมินวัตถุประสงค์ของเวลาที่จำเป็นสำหรับการทำงานเท่านั้น ควรเพิ่มระยะขอบเล็กน้อยเพื่อให้ครอบคลุมสถานการณ์เหตุสุดวิสัย มักจะถูกประเมินเป็นเปอร์เซ็นต์ของความสมบูรณ์ของงานหลัก แต่สำหรับทุกคนจะแตกต่างกัน: มีคนเพิ่ม 20% ของเวลา บางคน - 10% และบางคน - 50%

นอกจากนี้ยังเป็นประโยชน์ในการวิเคราะห์สาเหตุของเส้นตายที่ไม่ได้รับหลังจากการละเมิดเส้นตายที่สำคัญในแต่ละครั้ง หากคุณมีคุณสมบัติไม่เพียงพอ คุณต้องแก้ไขจุดอ่อนของคุณ ถ้าปัญหาคือองค์กร - ให้เข้าใจสิ่งที่ขัดขวางการทำงานปกติ

ส่งเสริม ต่ำกว่า

, ผู้อำนวยการด้านเทคนิคของศูนย์เทคโนโลยีและโซลูชั่นที่เป็นนวัตกรรม "Jet Infosystems"

บทความจำนวนมากทุ่มเทให้กับวิธีการประเมินความซับซ้อนของโครงการ รวมถึงระยะเวลาของงานและงานแต่ละอย่าง อย่างไรก็ตาม จนถึงปัจจุบันนี้เป็นต้นเหตุของความขัดแย้งทั้งภายในทีมโครงการและเมื่อสื่อสารกับลูกค้า

ผู้ช่วยหลักในการประเมินคือประสบการณ์ พยายามเชื่อมโยงงานใหม่กับงานที่ทำเสร็จแล้ว หากคุณกำลังทำรายงาน ดูว่ารายงานที่คล้ายกันใช้เวลานานเท่าใดในอดีต หากคุณกำลังทำสิ่งใหม่ ให้ลองแยกย่อยเป็นชิ้นที่รู้จักและชื่นชมพวกเขา หากงานเป็นงานใหม่ทั้งหมด ให้ใช้เวลาศึกษา (ให้ดียิ่งขึ้น - ประสานงานในครั้งนี้กับผู้กำหนดงาน)

ให้ความสนใจกับขั้นตอนที่เกี่ยวข้อง - หากคุณต้องการพัฒนาบริการ ควรรวมการทดสอบหน่วย (และอาจไม่ใช่แค่หน่วย) ในการประเมินด้วย การจัดเตรียมข้อมูลการทดสอบจะใช้เวลาระยะหนึ่ง พิจารณาการผสานรวมกับบริการอื่นๆ เป็นต้น ใช้เวลาในการแก้ไขจุดบกพร่องที่คุณพบหรือด้วยความช่วยเหลือจากผู้ทดสอบ เสียเวลามากมายกับงานที่ "มองไม่เห็น" ตัวอย่างเช่น มีการประเมินเพื่อการพัฒนาและมีการประเมินสำหรับการทดสอบ แต่การถ่ายโอนสิ่งประดิษฐ์สำหรับการทดสอบสามารถเชื่อมโยงกับการติดตั้งสแตนด์ ดังนั้นจึงเป็นเรื่องสำคัญที่จะต้องจินตนาการถึงกระบวนการทั้งหมดเพื่อไม่ให้พลาดอะไร

หลังจากกำหนดความเข้มข้นของแรงงานแล้ว จำเป็นต้องรวมงานใหม่ในปฏิทิน โดยไม่ลืมงานและกิจกรรมอื่นๆ ที่ดำเนินไปควบคู่กัน

และอย่าลืมว่าแผนนั้นไร้ประโยชน์ แต่การวางแผนนั้นมีค่ายิ่ง เรียนรู้ที่จะปรับแผนตรงเวลา ทำให้ทุกคนสนใจและแจ้งปัญหาได้ทันท่วงที เพื่อไม่ให้พลาดกำหนดเวลาที่พลาดไปจะไม่ทำให้ใครแปลกใจ

ส่งเสริม ต่ำกว่า

คำถามที่ไม่สามารถตอบในรูปแบบสั้น ๆ ถ้ามันง่ายก็ไม่มีปัญหาเรื่องกำหนดเวลาที่ขาดหายไป

ในการทำให้กำหนดเวลาการพัฒนาสามารถคาดเดาได้มากขึ้น ก่อนอื่นคุณต้องเข้าใจสาเหตุที่โปรแกรมเมอร์ทำผิดพลาดอยู่ตลอดเวลา

เหตุผลแรกคืองานส่วนใหญ่ที่โปรแกรมเมอร์ทำนั้นไม่ซ้ำกันในระดับใดระดับหนึ่ง เป็นไปได้มากว่าโปรแกรมเมอร์จะทำงานดังกล่าวเป็นครั้งแรก เขาไม่มีความคิดที่ดีว่างานจะใช้เวลานานแค่ไหน หากนี่คือโปรแกรมเมอร์ที่มีประสบการณ์มั่นคงและเขาต้องทำงานที่คล้ายกัน การประเมินของเขาจะใกล้เคียงกับความเป็นจริงมากขึ้น

เปรียบเทียบง่ายๆ หากคุณไม่เคยขุดคูน้ำมาก่อน คุณก็บอกไม่ได้ว่าการขุดคูน้ำกว้าง 30 ซม. ลึก 60 ซม. และยาว 20 เมตรจะใช้เวลานานแค่ไหน หากคุณเคยขุดมาก่อน เวลาทำงานโดยประมาณของคุณจะใกล้เคียงกับระยะเวลาจริงของงานมากขึ้น

เหตุผลที่สองคือโปรแกรมเมอร์มองโลกในแง่ดีโดยเนื้อแท้ นั่นคือ การพิจารณางาน การเลือกตัวเลือกการใช้งาน การประเมินการปรับปรุง นักพัฒนาคาดหวังว่าทุกอย่างจะทำงานตามที่เขาคาดหวัง และเขาไม่ได้คิดถึงปัญหาที่เขาจะเจอระหว่างทาง บ่อยครั้งเขาไม่สามารถคาดการณ์ล่วงหน้าได้ ตัวอย่างเช่น มีงานที่โปรแกรมเมอร์สามารถทำได้โดยใช้ไลบรารีซอฟต์แวร์โอเพนซอร์สของบริษัทอื่น ในขั้นตอนการประเมิน เขาพบมันบนอินเทอร์เน็ต อ่านคำอธิบาย - มันเหมาะกับเขา และเขายังประเมินปริมาณงานที่จะสร้างโดยใช้ห้องสมุดนี้ได้อย่างถูกต้อง แต่เขาไม่ได้คาดการณ์เลยว่าจะเกิดข้อผิดพลาดขึ้นในสภาพแวดล้อมของผลิตภัณฑ์ซอฟต์แวร์ของเขาในไลบรารีนี้

นักพัฒนาจะต้องไม่เพียงแค่สร้างการใช้ไลบรารีลงในโค้ดของพวกเขาเท่านั้น แต่ยังต้องแก้ไขข้อผิดพลาดในไลบรารีด้วย และบ่อยครั้งที่ผู้พัฒนาไม่ได้ให้เวลาในการแก้ไขข้อผิดพลาดของเขา จากสถิติแสดงให้เห็นว่า การทดสอบและแก้ไขข้อผิดพลาดอาจใช้เวลาประมาณ 50% ของเวลาที่ใช้ในการเข้ารหัส ตัวเลขขึ้นอยู่กับคุณสมบัติของนักพัฒนา สิ่งแวดล้อม แนวทางการพัฒนาที่ใช้ (เช่น การทดสอบหน่วยลดเวลานี้ลงอย่างมาก และระยะเวลารวม / ความเข้มแรงงานของงานพัฒนาจะน้อยลง)

หากเราย้อนกลับไปที่การเปรียบเทียบกับรถขุด รถขุดไม่ได้คาดหวังว่าจอบของเขาจะพัง และเขาจะต้องใช้เวลาสองชั่วโมงในการค้นหาการตัดใหม่

เหตุผลที่สามคือข้อกำหนดที่ไม่คาดฝัน ไม่มีส่วนใดของการผลิตวัสดุที่ลูกค้าชอบที่จะเปรียบเทียบการพัฒนาซอฟต์แวร์ที่มีความต้องการใหม่ ๆ ลองนึกภาพทางเดินของรถขุดที่ขุดได้ 19 เมตรจากทั้งหมด 20 เมตร และได้ยินจากลูกค้าว่าต้องการให้คูน้ำไม่เป็นเส้นตรง แต่เหมือนงูที่มีความยาวบ่า 97 เซนติเมตร

จะจัดการกับสิ่งเหล่านี้ได้อย่างไรและจะอยู่ในสภาวะที่ไม่แน่นอนได้อย่างไร? ลดความไม่แน่นอนและเพิ่มเวลาสำรอง

วิธีที่ง่ายที่สุดในการทำให้ความคาดหวังของคุณใกล้เคียงกับความเป็นจริงมากขึ้นคือการใช้กฎง่ายๆ ว่า "Pi" เมื่อได้รับค่าประมาณจากผู้พัฒนาแล้ว (ในแง่ของเวลาหรือความเข้มของแรงงาน) คุณต้องคูณด้วยจำนวน Pi (= 3.14159) ยิ่งนักพัฒนามีประสบการณ์มากในการประมาณการ ค่าสัมประสิทธิ์นี้ก็จะยิ่งต่ำลงเท่านั้น

จำเป็นต้องฝึกการสลายตัวของปัญหาเดิมให้เป็นปัญหาเล็ก ๆ ที่มีขนาดไม่เกิน 4 ชั่วโมง ยิ่งรายละเอียดการสลายตัวมากเท่าใด โอกาสที่การประมาณการจะใกล้เคียงกับการป้อนเข้า/ระยะเวลาของแรงงานจริงก็จะยิ่งสูงขึ้น
ถ้าเรากลับไปจัดสรรทุนสำรอง - คราวนี้ควรจัดสรรเมื่อสิ้นสุดโครงการ เป็นแนวปฏิบัติที่ไม่ดีที่จะสำรองและรวมไว้สำหรับแต่ละงาน กฎของพาร์กินสัน "งานเติมตลอดเวลาที่ได้รับ" ดำเนินการอย่างจริงจัง

หากคุณสรุป "ผลรวม" สั้น ๆ เพื่อกำหนดเวลาของงานอย่างถูกต้องการดำเนินการต่อไปนี้จะเป็นประโยชน์:

  • ดำเนินการสลายงาน แบ่งงานออกเป็นขั้นตอนโดยละเอียดที่สุด
  • การสร้างต้นแบบ;
  • จำกัดการดำเนินการตามข้อกำหนดที่คาดไม่ถึงก่อนหน้านี้ ไม่ได้หมายความว่าไม่จำเป็นต้องทำ แต่แนะนำให้เน้นข้อกำหนดเหล่านี้และตกลงกับลูกค้าในการเปลี่ยนแปลงเวลาและค่าใช้จ่ายในการดำเนินการ
  • คำนึงถึงเวลาในการรักษาเสถียรภาพของสารละลาย
  • ใช้แนวทางปฏิบัติเพื่อปรับปรุงคุณภาพของโค้ด เช่น การเขียนแบบทดสอบหน่วย
  • วางสำรองทั่วไป

และจำไว้ว่าหากข้อเท็จจริงเกินค่าประมาณของคุณ 30% นี่เป็นผลลัพธ์ที่ดีมาก

ส่งเสริม ต่ำกว่า

เพื่อการประเมินที่แม่นยำที่สุด คุณต้องมีประสบการณ์ในการพัฒนาจริงและในสาขาเฉพาะ แต่มีกฎทั่วไปที่จะช่วยหลีกเลี่ยงข้อผิดพลาดในการวางแผนและปัญหาเมื่อส่งมอบงานให้กับลูกค้า ฉันจะอธิบายกฎเหล่านี้ดังต่อไปนี้

ก่อนอื่น คุณต้องเข้าใจงาน ดูเหมือนว่าจะชัดเจนและไม่เกี่ยวข้องโดยตรงกับการประเมินเวลา แต่อันที่จริงมันเป็นประเด็นสำคัญ แม้แต่ในโครงการขนาดใหญ่ที่จริงจัง หนึ่งในปัจจัยหลักของความล้มเหลวและความล่าช้าก็คือปัญหาในการกำหนดข้อกำหนด สำหรับนักพัฒนามือใหม่ แต่น่าเสียดายที่นี่เป็นปัญหาร้ายแรง - พวกเขาไม่อ่าน TOR หรืออ่านและทำความเข้าใจอย่างเลือกสรร (พวกเขาจำและกรอกห้าในสิบคะแนนและพวกเขาจำส่วนที่เหลือเมื่อส่งผลลัพธ์) เป็นที่ชัดเจนว่างานที่เข้าใจผิดไม่สามารถดำเนินการได้ทันเวลาอย่างเหมาะสม

ถัดไป - ประมาณการเวลาในการพัฒนาตัวเอง ลักษณะเฉพาะของการเขียนโปรแกรมคือไม่มีงานที่เหมือนกันทุกประการ ทำให้งานของเราน่าสนใจยิ่งขึ้น แต่จังหวะเวลานั้นยากกว่า การสลายตัวทำงานได้ดีที่นี่เช่น แบ่งงานเฉพาะที่ซับซ้อนออกเป็นลำดับงานย่อยเล็กๆ ที่คุ้นเคย และแต่ละคนสามารถประมาณได้อย่างเพียงพอในไม่กี่ชั่วโมง เราบวกค่าประมาณของงานย่อย - และเราจะได้ค่าประมาณของปัญหาทั้งหมด

โดยทั่วไป ค่าประมาณนี้จะรวมเฉพาะต้นทุนการเข้ารหัสโดยตรงเท่านั้น ไม่ต้องสงสัยเลยว่านี่เป็นส่วนที่สำคัญที่สุดของการพัฒนา แต่ยังห่างไกลจากส่วนเดียว (และบ่อยครั้ง - ไม่ใช่ส่วนที่ใหญ่โตที่สุด) การใช้งานอย่างสมบูรณ์ยังรวมถึงการอ่านและการชี้แจงข้อกำหนดทางเทคนิค การประชุมกับเพื่อนร่วมงานหรือลูกค้า การดีบักและการทดสอบ การร่างเอกสาร การส่งมอบผลลัพธ์ (การสาธิตให้กับลูกค้าและการเปลี่ยนแปลงที่เป็นไปได้ตามความคิดเห็นของเขา) คุณต้องใช้เวลานานแค่ไหนสำหรับการกระทำเหล่านี้ ประสบการณ์เท่านั้นที่จะบอกได้ ในตอนแรก อย่างน้อยก็เป็นสิ่งสำคัญที่จะไม่ลืมที่จะนำมาพิจารณาในการคำนวณ และสามารถสอบถามเวลาโดยประมาณโดยประมาณได้จากเพื่อนร่วมงานที่มีประสบการณ์มากกว่า

ดังนั้นเราจึงประมาณการต้นทุนแรงงานเข้ารหัส บวกค่าประมาณของต้นทุนงานเพิ่มเติม - และเราจะได้ค่าประมาณเวลาที่ต้องการเพื่อให้งานเสร็จลุล่วง แต่นั่นไม่ใช่ทั้งหมด! จำเป็นต้องระบุวันที่เสร็จสิ้นตามแผนของงาน มันจะเป็นความผิดพลาดที่จะเอาและหารค่าแรง (เป็นชั่วโมง) เป็น 8 ชั่วโมงแล้วบวกกับวันที่ปัจจุบัน ในชีวิตจริง นักพัฒนาไม่เคย (แทบจะไม่เคยเลย) ทำงาน 100% กับงานเฉพาะอย่างใดเลย คุณจะต้องใช้เวลากับงานอื่น ๆ อย่างแน่นอน - สำคัญ แต่ไม่เกี่ยวข้องโดยตรงกับงานหลัก ตัวอย่างเช่น การช่วยเหลือเพื่อนร่วมงาน การฝึกอบรม การรายงาน ฯลฯ โดยปกติเมื่อวางแผนจะเชื่อว่า 60-70% ของเวลาทำงานถูกใช้โดยตรงกับงานในโครงการปัจจุบัน นอกจากนี้ คุณต้องคำนึงถึงความล่าช้าที่อาจเกิดขึ้นซึ่งจะทำให้คุณทำงานไม่ต่อเนื่อง ตัวอย่างเช่น ถ้าคุณจำเป็นต้องโต้ตอบกับผู้อื่น (เพื่อนร่วมงาน ลูกค้า) ให้คำนึงถึงการจ้างงาน ตารางการทำงาน ฯลฯ

ต่อไปนี้คือกฎพื้นฐานซึ่งในความคิดของฉัน จะช่วยให้นักพัฒนาหลีกเลี่ยงปัญหาในการประมาณค่าและดำเนินการตามกำหนดเวลาได้ นอกจากนี้ กุญแจสำคัญคือการสะสมประสบการณ์ของตนเองทั้งในการดำเนินงานและในการประเมิน ตัวอย่างเช่น หลังจากเสร็จสิ้นงาน จะมีประโยชน์มากในการเปรียบเทียบประมาณการเบื้องต้นของคุณกับกรอบเวลาจริงและสรุปผลสำหรับอนาคต และแน่นอนว่ามันคุ้มค่าที่จะศึกษาประสบการณ์ของคนอื่น ฉันจะแนะนำในหัวข้อของหนังสือโดย S. McConnell "ต้นทุนโครงการซอฟต์แวร์ราคาเท่าไหร่" และ S. Arkhipenkov "การบรรยายเกี่ยวกับการจัดการโครงการซอฟต์แวร์"

ส่งเสริม ต่ำกว่า

ในการประเมินและวางแผนกำหนดเวลา มีความจำเป็น:

  1. แยกย่อยงานออกเป็นชิ้นเล็ก ๆ เพื่อใช้งานเพื่อให้มีความเข้าใจที่ชัดเจนว่าจะใช้เวลานานแค่ไหนในการพัฒนาแต่ละส่วนดังกล่าว
  2. ควบคู่ไปกับการสลายตัว คำถามเพิ่มเติมเกี่ยวกับการทำงานที่ไม่ได้อธิบายไว้ในคำชี้แจงปัญหาจะเกิดขึ้นอย่างแน่นอน จำเป็นต้องได้รับคำตอบสำหรับคำถามดังกล่าว เนื่องจากสิ่งนี้เกี่ยวข้องโดยตรงกับขอบเขตของงานและด้วยเหตุนี้ เวลา
  3. เพิ่มความเสี่ยงบางส่วนในการประเมินขั้นสุดท้าย สิ่งนี้ถูกกำหนดโดยเชิงประจักษ์ คุณสามารถเริ่มด้วยความเสี่ยง 10-15%
  4. ทำความเข้าใจว่าโปรแกรมเมอร์ยินดีจัดสรรงานให้วันละกี่ชั่วโมง
  5. เราแบ่งการประมาณการขั้นสุดท้ายด้วยจำนวนชั่วโมงที่เราจัดสรรต่อวัน และเราได้จำนวนวันที่ต้องใช้สำหรับการนำไปใช้
  6. เรามุ่งเน้นที่ปฏิทินและจำนวนวันที่ต้องดำเนินการให้เสร็จสิ้น เราคำนึงถึงวันหยุดสุดสัปดาห์และวันอื่นๆ ที่โปรแกรมเมอร์ไม่สามารถจัดการกับงานได้ เช่นเดียวกับวันที่เริ่มงาน (ผู้พัฒนาไม่พร้อมเสมอที่จะรับงานในวันเดียวกัน) ดังนั้นเราจึงได้รับวันที่เริ่มต้นและสิ้นสุดของการทำงาน

ส่งเสริม ต่ำกว่า

ในบริษัทของเรา การวางแผนงานต้องผ่านหลายขั้นตอนเสมอ ในด้านธุรกิจ เรากำหนดเป้าหมายเชิงกลยุทธ์สำหรับปี 5-6 รายการ งานเหล่านี้เป็นงานระดับสูง เช่น การเพิ่มพารามิเตอร์เป็นเปอร์เซ็นต์ที่แน่นอน นอกจากนี้ แผนกต่างๆ ของบริษัทยังทำหน้าที่ทางธุรกิจสำหรับทีมไอทีทั้งหมด กำหนดเวลาสำหรับงานเหล่านี้จะได้รับการประเมินเบื้องต้นคร่าวๆ ซึ่งมักเกิดขึ้นจากสมาชิกในทีมทุกคน ไม่ว่าจะเป็นผู้จัดการ นักวิเคราะห์ นักพัฒนา และผู้ทดสอบ เมื่อได้รับการประเมินนี้แล้ว ธุรกิจจะจัดลำดับความสำคัญของงานโดยคำนึงถึงเป้าหมายเชิงกลยุทธ์ของบริษัท เป้าหมายเชิงกลยุทธ์ที่ตัดขวางจะช่วยในเรื่องนี้ โดยเห็นได้ชัดว่าเราทุกคนทำงานเพื่อสาเหตุร่วมกัน ไม่มีสถานการณ์เช่นนั้นเมื่อมีคนดึงมาในทิศทางของพวกเขาเท่านั้น เรารวบรวมการวิ่งจากงานที่ประมาณไว้อย่างแม่นยำ บางทีมมีรายไตรมาส บางทีมมีรายเดือน ทีมต่างๆ ให้การประเมินที่แม่นยำสำหรับปัญหาหลายประการ ซึ่งตามการประมาณการเบื้องต้น จะเข้าสู่การวิ่งครั้งต่อไป งานขนาดใหญ่แบ่งออกเป็นงานระดับล่างซึ่งแต่ละงานมีหน้าที่รับผิดชอบเฉพาะและเป็นผู้ให้การประเมินที่ถูกต้อง

ในขั้นตอนนี้ เป็นสิ่งสำคัญที่จะไม่ลืมเพิ่มเวลาพิเศษในการแก้ไขจุดบกพร่อง เพราะเฉพาะผู้ที่ไม่ทำอะไรเลยเท่านั้นที่ไม่ผิด สิ่งนี้เป็นที่เข้าใจกันดีทั้งจากเจ้าของผลิตภัณฑ์และลูกค้าธุรกิจ ในเวลาเดียวกัน ระยะเวลาที่กำหนดต้องเพียงพอ ไม่มีใครเข้าใจนักพัฒนาที่กำหนดเวลางานง่าย ๆ ไว้นานเกินไป เขาจะถูกขอให้แสดงเหตุผลในการตัดสินใจ ส่วนที่ยากที่สุดคือการอธิบายให้ธุรกิจฟังว่าเหตุใดจึงต้องใช้เวลาในการปรับโครงสร้างใหม่ เรารู้สึกขอบคุณบริษัทของเราสำหรับความจริงที่ว่าบางครั้งเราประสบความสำเร็จ เพราะในที่สุดการจัดโครงสร้างใหม่จะนำไปสู่โครงสร้างพื้นฐานที่เบากว่า และวางสิ่งต่าง ๆ ให้เป็นระเบียบในโค้ด ซึ่งเพิ่มความเสถียรของระบบและสามารถเร่งการพัฒนาใหม่ได้อย่างมาก ฟังก์ชั่น.

บางครั้งข้อผิดพลาดในการประเมินก็เกิดขึ้นได้ ในความคิดของฉัน เป็นไปไม่ได้ที่ฝ่ายพัฒนาในบริษัทขนาดใหญ่ที่มีโครงสร้างพื้นฐานที่พัฒนาแล้วจะหลีกเลี่ยงสิ่งนี้ได้อย่างสมบูรณ์ ในกรณีนี้ เป็นสิ่งสำคัญที่นักพัฒนาต้องแจ้งให้ผู้จัดการของเขาทราบเกี่ยวกับสิ่งที่เกิดขึ้นในเวลาที่เหมาะสม และในทางกลับกัน เขาก็มีเวลาที่จะเตือนธุรกิจและ "เอาชนะ" บางสิ่งในแผนทั่วไปของบริษัท ในโหมดดังกล่าว การทำงานจะถูกต้องมากกว่าการพยายามทำสิ่งที่ใช้เวลา 5 วันใน 3 วันอย่างเมามัน แล้วจมดิ่งลงไปในความผิดพลาดจำนวนมากที่เกิดขึ้นเนื่องจากความเร่งรีบเช่นนี้

ส่งเสริม ต่ำกว่า

คำตอบที่ถูกต้องของคำถามทั้งสองส่วน [วิธีการเรียนรู้วิธีวางแผนและส่งมอบโครงการให้ตรงเวลาอย่างเหมาะสม - เอ็ด.] - ประสบการณ์. ไม่มีวิธีอื่นในการ "รู้จักเซน" ตามทฤษฎีการตัดสินใจ การอนุมานที่ถูกต้องทุกรูปแบบสามารถสร้างได้บนพื้นฐานของการวิเคราะห์ข้อมูลที่มีอยู่แล้วจำนวนหนึ่งเท่านั้น ยิ่งมีข้อมูลนี้มากเท่าใด การคาดการณ์และการประเมินขั้นสุดท้ายก็จะยิ่งแม่นยำมากขึ้นเท่านั้น

ในคำพูดของเฮอร์เบิร์ต ชอว์: "ประสบการณ์คือโรงเรียนที่คนเราจะเรียนรู้ว่าเขาเคยโง่แค่ไหน" ดังนั้น ข้อสรุปที่ค่อนข้างง่ายมีดังนี้: หากโปรแกรมเมอร์มีประสบการณ์ที่เกี่ยวข้องกับงานที่ทำอยู่แล้ว เขาสามารถพึ่งพาประสบการณ์ของ "เพื่อนร่วมงานในร้าน" ได้ แต่ถ้าไม่ใช่

ต่อไป คุณต้องเข้าใจว่าการจัดกำหนดการโดยตรงเป็นงานที่ผู้คนทำอย่างมาก แย่มาก โดยเฉพาะอย่างยิ่งในการพัฒนา แนวปฏิบัติที่ดีในการประมาณวันที่ครบกำหนดเพื่อแนะนำ "ปัจจัยการแก้ไข" ในการประมาณการเดิม ตัวชี้วัดนี้สามารถผันผวนได้ในช่วง 1.5 ถึง 3 ขึ้นอยู่กับประสบการณ์ของนักพัฒนาและจำนวนรวมของระดับความไม่แน่นอนของงานที่แก้ไขภายในโครงการ

ส่งเสริม ต่ำกว่า

การพิจารณาปัจจัยหลายอย่างในการกำหนดเวลาเป็นสิ่งสำคัญ

เช่น ประสบการณ์ทำงาน คุณจินตนาการถึงขอบเขตของงานที่จะเกิดขึ้นได้ชัดเจนเพียงใด คุณเคยทำอะไรแบบนี้มาก่อนหรือไม่? เป็นที่ชัดเจนว่ายิ่งมีประสบการณ์มากเท่าไหร่งานก็จะสำเร็จเร็วขึ้นเท่านั้น

การมอบหมายด้านเทคนิคที่เขียนอย่างดีมีบทบาทสำคัญในการกำหนดกำหนดเวลา ด้วยสิ่งนี้ในพื้นที่ของเรา สิ่งต่าง ๆ จึงเป็นเรื่องยากมาก บ่อยครั้งที่ลูกค้าเองไม่รู้ว่าเขาต้องการอะไร ดังนั้นฉันจึงแนะนำให้คุณใช้เวลาเพิ่มอีกวันหรือสองวัน แต่ขอแนวคิดที่ชัดเจนเกี่ยวกับผลลัพธ์ที่ต้องการจากลูกค้า สิ่งสำคัญคือการนำเสนอนี้จะต้องสอดคล้องกัน และหลังจากนั้นคุณสามารถเริ่มเจรจาจำนวนเงินและเงื่อนไขได้

รวมถึงความเสี่ยงเสมอ สำหรับผู้เริ่มต้น ฉันแนะนำให้คูณเวลารอคอยสินค้าโดยประมาณด้วยสอง ท้ายที่สุด ดีกว่าที่จะส่งมอบโครงการก่อนกำหนดและเติบโตเป็นผู้เชี่ยวชาญในสายตาของลูกค้า แทนที่จะส่งในภายหลังและทำลายชื่อเสียงของคุณ

ส่งเสริม ต่ำกว่า

คำแนะนำทั่วไป - นักพัฒนาจำเป็นต้องเรียนรู้วิธีแยกส่วนงานอย่างถูกต้อง มองหาข้อผิดพลาดที่เป็นไปได้เสมอ พึ่งพาประสบการณ์ของตัวเอง และไม่ลืมที่จะเตือนลูกค้าและเพื่อนร่วมงานให้ทันเวลาหากงานไม่สามารถแก้ไขได้ภายในกรอบเวลาที่กำหนด

การสร้างแผนงานที่ชัดเจนนั้นยากกว่าการกำหนดเส้นตายสำหรับงานเฉพาะ ในขณะเดียวกัน สิ่งสำคัญไม่เพียงแต่ต้องส่งมอบโครงการตรงเวลาเท่านั้น แต่ยังต้องแน่ใจว่าระบบที่คุณพัฒนาขึ้นนั้นสามารถแก้ปัญหาทางธุรกิจได้อย่างถูกต้อง ที่นี่ ทีมไอทีจะได้รับความช่วยเหลือจากวิธีการพัฒนาซอฟต์แวร์ต่างๆ ตั้งแต่ RUP และ MSF ไปจนถึง SCRUM และรูปแบบ Agile อื่นๆ เครื่องมือมีให้เลือกมากมาย และลูกค้าจำนวนมากต้องการทำความเข้าใจล่วงหน้าว่าเราจะทำงานร่วมกับพวกเขาอย่างไรในโครงการนี้ และเรายึดถือหลักการใด

อย่างไรก็ตาม หัวข้อ Agile นั้นใกล้เคียงกับธุรกิจมากขึ้น และแม้แต่ในแต่ละโครงการสำหรับภาครัฐ เนื่องจากหลักการของวิธีการนี้ทำให้สามารถดำเนินโครงการได้อย่างรวดเร็ว โดยสามารถจัดการความคาดหวังของลูกค้าในการทำซ้ำแต่ละครั้ง ตัวอย่างเช่น ในทีม Agile แทบไม่มีการพูดคุยกับลูกค้าเป็นเวลานาน ลืมหน้าที่อธิบายรายละเอียดทางเทคนิคที่ไม่จำเป็นไปได้เลย เช่น ความเร็วในการแสดงเมนูแบบเลื่อนลง เปิดโอกาสให้ลูกค้าได้ลองใช้ระบบเวอร์ชันกลาง แล้วคุณจะเข้าใจซึ่งกันและกันได้ง่ายขึ้น

ทีมงานที่คล่องตัววางแผนทุกอย่างร่วมกันและกำหนดระดับค่าแรงที่เหมาะสมที่สุดที่จำเป็นสำหรับการแก้ปัญหาเฉพาะ ตัวอย่างเช่น หนึ่งในเทคนิคที่เรียกว่า "การวางแผนโป๊กเกอร์" โดยที่ผู้เข้าร่วมแต่ละคนไม่ระบุตัวตนให้ประมาณการปริมาณงานที่จำเป็นสำหรับงานเฉพาะ หลังจากนั้น ทีมงานจะกำหนดน้ำหนักเฉลี่ยของงานในประเด็นเรื่องหรือชั่วโมงการทำงาน และกระจายงานตามหลักการ “ใครชอบอะไร” ในเวลาเดียวกัน ทีมงานจะรวมตัวกันทุกวันเป็นเวลา 15 นาที เมื่อทุกคนพูดถึงสถานะของงานปัจจุบันในเวลาไม่กี่นาที ซึ่งรวมถึงการรายงานปัญหาที่เกิดขึ้น ทีมงานกำจัดปัญหาที่ตรวจพบอย่างรวดเร็ว ดังนั้นลูกค้าจึงดูขั้นตอนต่อไปของการทำงานของโปรแกรมเมอร์โดยเร็วที่สุด นักพัฒนาจะไม่ล่าช้ากำหนดเวลาสำหรับการทำงานให้เสร็จเนื่องจากไม่ต้องการดึงทีมอีกครั้งหรือพยายามคิดหาทางออกด้วยตัวเองโดยเปล่าประโยชน์ซึ่งฆ่าเวลาอันมีค่า อย่างไรก็ตาม ด้วยสถานะขนาดเล็กเช่นนี้ นักพัฒนาซอฟต์แวร์มีความปรารถนาที่จะแสดงด้านที่ดีที่สุดเพื่อแสดงให้เห็นว่าคุณมีความรับผิดชอบต่องานของคุณ มันกระตุ้นและมีวินัยในตนเองจริงๆ