مقالات

8.1E: تمارين - رياضيات


مع التدريب يأتي الإتقان

في التدريبات التالية ، حدد القيم التي لم يتم تعريف التعبير المنطقي لها.

مثال ( PageIndex {49} )

  1. ( frac {2x} {z} )
  2. ( frac {4p − 1} {6p − 5} )
  3. ( فارك {n − 3} {n ^ 2 + 2n − 8} )
إجابه
  1. ض = 0
  2. (p = frac {5} {6} )
  3. ن = −4 ، ن = 2

مثال ( PageIndex {50} )

  1. ( فارك {10 م} {11n} )
  2. ( frac {6y + 13} {4y − 9} )
  3. ( frac {b − 8} {b ^ 2−36} )

مثال ( PageIndex {51} )

  1. ( frac {4x ^ {2} y} {3y} )
  2. ( frac {3x − 2} {2x + 1} )
  3. ( frac {u − 1} {u ^ 2−3u − 28} )
إجابه
  1. ص = 0
  2. (س = - فارك {1} {2} )
  3. ش = −4 ، ش = 7

مثال ( PageIndex {52} )

  1. ( frac {5pq ^ {2}} {9q} )
  2. ( frac {7a − 4} {3a + 5} )
  3. ( فارك {1} {س ^ 2−4} )

قيم التعبيرات المنطقية

في التدريبات التالية ، قم بتقييم التعبير المنطقي للقيم المعطاة.

مثال ( PageIndex {53} )

( فارك {2x} {س − 1} )

  1. س = 0
  2. س = 2
  3. س = -1
إجابه
  1. 0
  2. 4
  3. 1

مثال ( PageIndex {54} )

( frac {4y − 1} {5y − 3} )

  1. ص = 0
  2. ص = 2
  3. ص = -1

مثال ( PageIndex {55} )

( frac {2p + 3} {p ^ 2 + 1} )

  1. ع = 0
  2. ع = 1
  3. ع = −2
إجابه
  1. 3
  2. ( فارك {5} {2} )
  3. (- frac {1} {5} )

مثال ( PageIndex {56} )

( frac {x + 3} {23x} )

  1. س = 0
  2. س = 1
  3. س = −2

مثال ( PageIndex {57} )

( frac {y ^ 2 + 5y + 6} {y ^ 2−1} )

  1. ص = 0
  2. ص = 2
  3. ص = −2
إجابه
  1. −6
  2. ( فارك {20} {3} )
  3. 0

مثال ( PageIndex {58} )

( frac {z ^ 2 + 3z − 10} {z ^ 2−1} )

  1. ض = 0
  2. ض = 2
  3. ض = −2

مثال ( PageIndex {59} )

( frac {a ^ 2−4} {a ^ 2 + 5a + 4} )

  1. أ = 0
  2. أ = 1
  3. أ = -2
إجابه
  1. −1
  2. (- frac {3} {10} )
  3. 0

مثال ( PageIndex {60} )

( frac {b ^ 2 + 2} {b ^ 2−3b − 4} )

  1. ب = 0
  2. ب = 2
  3. ب = −2

مثال ( PageIndex {61} )

( frac {x ^ 2 + 3xy + 2y ^ 2} {2x ^ {3} y} )

  1. س = 1 ، ص = -1
  2. س = 2 ، ص = 1
  3. س = -1 ، ص = -2
إجابه
  1. 0
  2. ( فارك {3} {4} )
  3. ( فارك {15} {4} )

مثال ( PageIndex {62} )

( frac {c ^ 2 + cd − 2d ^ 2} {cd ^ {3}} )

  1. ج = 2 ، د = -1
  2. ج = 1 ، د = -1
  3. ج = -1 ، د = 2

مثال ( PageIndex {63} )

( frac {m ^ 2−4n ^ 2} {5mn ^ 3} )

  1. م = 2 ، ن = 1
  2. م = -1 ، ن = -1
  3. م = 3 ، ن = 2
إجابه
  1. 0
  2. (- فارك {3} {5} )
  3. (- frac {7} {20} )

مثال ( PageIndex {64} )

( frac {2s ^ {2} t} {s ^ 2−9t ^ 2} )

  1. ق = 4 ، ر = 1
  2. ق = -1 ، ر = -1
  3. ق = 0 ، ر = 2

​​​​​​​تبسيط التعبيرات المنطقية

في التدريبات التالية ، قم بالتبسيط.

مثال ( PageIndex {65} )

(- frac {4} {52} )

إجابه

(- frac {1} {13} )

مثال ( PageIndex {66} )

(- frac {44} {55} )

مثال ( PageIndex {67} )

( فارك {56} {63} )

إجابه

( فارك {8} {9} )

مثال ( PageIndex {68} )

( frac {65} {104} )

مثال ( PageIndex {69} )

( frac {6ab ^ {2}} {12a ^ {2} b} )

إجابه

( frac {b} {2ab} )

مثال ( PageIndex {70} )

( frac {15xy ^ {3}} {x ^ {3} y ^ {3}} )

مثال ( PageIndex {71} )

( frac {8m ^ {3} n} {12mn ^ 2} )

إجابه

( فارك {2 م ^ 2} {3n} )

مثال ( PageIndex {72} )

( frac {36v ^ {3} w ^ 2} {27vw ^ 3} )

مثال ( PageIndex {73} )

( frac {3a + 6} {4a + 8} )

إجابه

( فارك {3} {4} )

مثال ( PageIndex {74} )

( frac {5b + 5} {6b + 6} )

مثال ( PageIndex {75} )

( frac {3c − 9} {5c − 15} )

إجابه

( فارك {3} {5} )

مثال ( PageIndex {76} )

( frac {4d + 8} {9d + 18} )

مثال ( PageIndex {77} )

( frac {7m + 63} {5m + 45} )

إجابه

( فارك {7} {5} )

مثال ( PageIndex {78} )

( frac {8n − 96} {3n − 36} )

تمرين ( PageIndex {79} )

( frac {12p − 240} {5p − 100} )

إجابه

( فارك {12} {5} )

مثال ( PageIndex {80} )

( frac {6q + 210} {5q + 175} )

مثال ( PageIndex {81} )

( frac {a ^ 2 − a − 12} {a ^ 2−8a + 16} )

إجابه

( frac {a + 3} {a − 4} )

مثال ( PageIndex {82} )

( frac {x ^ 2 + 4x − 5} {x ^ 2−2x + 1} )

مثال ( PageIndex {83} )

( frac {y ^ 2 + 3y − 4} {y ^ 2−6y + 5} )

إجابه

( frac {y + 4} {y − 5} )

مثال ( PageIndex {84} )

( frac {v ^ 2 + 8v + 15} {v ^ 2 − v − 12} )

مثال ( PageIndex {85} )

( frac {x ^ 2−25} {x ^ 2 + 2x − 15} )

إجابه

( frac {x − 5} {x − 3} )

مثال ( PageIndex {86} )

( frac {a ^ 2−4} {a ^ 2 + 6a − 16} )

مثال ( PageIndex {87} )

( frac {y ^ 2−2y − 3} {y ^ 2−9} )

إجابه

( frac {y + 1} {y + 3} )

مثال ( PageIndex {88} )

( frac {b ^ 2 + 9b + 18} {b ^ 2−36} )

مثال ( PageIndex {89} )

( frac {y ^ 3 + y ^ 2 + y + 1} {y ^ 2 + 2y + 1} )

إجابه

( frac {y ^ 2 + 1} {y + 1} )

مثال ( PageIndex {90} )

( frac {p ^ 3 + 3p ^ 2 + 4p + 12} {p ^ 2 + p − 6} )

مثال ( PageIndex {91} )

( frac {x ^ 3−2x ^ 2−25x + 50} {x ^ 2−25} )

إجابه

س − 2

مثال ( PageIndex {92} )

( frac {q ^ 3 + 3q ^ 2−4q − 12} {q ^ 2−4} )

مثال ( PageIndex {93} )

( frac {3a ^ 2 + 15a} {6a ^ 2 + 6a − 36} )

إجابه

( فارك {أ (أ + 5)} {2 (أ + 3) (أ − 2)} )

مثال ( PageIndex {94} )

( frac {8b ^ 2−32b} {2b ^ 2−6b − 80} )

مثال ( PageIndex {95} )

( frac {−5c ^ 2−10c} {- 10c ^ 2 + 30c + 100} )

إجابه

( فارك {ج} {2 (ج − 5)} )

مثال ( PageIndex {96} )

( frac {4d ^ 2−24d} {2d ^ 2−4d − 48} )

مثال ( PageIndex {97} )

( frac {3m ^ 2 + 30m + 75} {4m ^ 2−100} )

إجابه

( فارك {3 (م + 5)} {4 (م − 5)} )

مثال ( PageIndex {98} )

( frac {5n ^ 2 + 30n + 45} {2n ^ 2−18} )

مثال ( PageIndex {99} )

( frac {5r ^ 2 + 30r − 35} {r ^ 2−49} )

إجابه

( فارك {5 (r − 1)} {r + 7} )

مثال ( PageIndex {100} )

( frac {3s ^ 2 + 30s + 72} {3s ^ 2−48} )

مثال ( PageIndex {101} )

( frac {t ^ 3−27} {t ^ 2−9} )

إجابه

( frac {t ^ 2 + 3t + 9} {t + 3} )

مثال ( PageIndex {102} )

( frac {v ^ 3−1} {v ^ 2−1} )

مثال ( PageIndex {103} )

( frac {w ^ 3 + 216} {w ^ 2−36} )

إجابه

( frac {w ^ 2−6w + 36} {w − 6} )

مثال ( PageIndex {104} )

( frac {v ^ 3 + 125} {v ^ 2−25} )

بسّط التعابير المنطقية ذات العوامل المعاكسة

في التمارين التالية ، بسّط كل تعبير منطقي.

مثال ( PageIndex {105} )

( frac {a − 5} {5 − a} )

إجابه

−1

مثال ( PageIndex {106} )

( frac {b − 12} {12 − b} )

مثال ( PageIndex {107} )

( frac {11 − c} {c − 11} )

إجابه

−1

مثال ( PageIndex {108} )

( فارك {5 − د} {د − 5} )

مثال ( PageIndex {109} )

( frac {12−2x} {x ^ 2−36} )

إجابه

(- frac {2} {x + 6} )

مثال ( PageIndex {110} )

( frac {20−5y} {y ^ 2−16} )

مثال ( PageIndex {111} )

( frac {4v − 32} {64 − v ^ 2} )

إجابه

(- frac {4} {8 + v} )

مثال ( PageIndex {112} )

( frac {7w − 21} {9 − w ^ 2} )

مثال ( PageIndex {113} )

( frac {y ^ 2−11y + 24} {9 − y ^ 2} )

إجابه

(- فارك {y − 8} {3 + ص} )

مثال ( PageIndex {114} )

( frac {z ^ 2−9z + 20} {16 − z ^ 2} )

مثال ( PageIndex {115} )

( frac {a ^ 2−5a − 36} {81 − a ^ 2} )

إجابه

(- frac {a + 4} {9 + a} )

مثال ( PageIndex {116} )

( فارك {ب ^ 2 + ب − 42} {36 − ب ^ 2} )

الرياضيات اليومية

مثال ( PageIndex {117} )

معدلات الضرائب بالنسبة للسنة الضريبية 2015 ، يمكن العثور على مبلغ الضريبة المستحقة على شخص واحد يكسب ما بين 37،450 دولارًا أمريكيًا و 90،750 دولارًا أمريكيًا عن طريق تقييم الصيغة 0.25 × 4206.25 ين ياباني ، حيث x هو الدخل. يمكن العثور على متوسط ​​معدل الضريبة لهذا الدخل من خلال تقييم الصيغة ( frac {0.25x − 4206.25} {x} ). ما هو متوسط ​​معدل الضريبة لشخص واحد يكسب 50000 دولار؟

إجابه

16.5%

مثال ( PageIndex {118} )

عمل يمكن العثور على المدة التي يستغرقها شخصان لأداء نفس المهمة إذا عملوا معًا من خلال تقييم الصيغة ( frac {xy} {x + y} ). إذا تمكن توم من رسم العرين في x = 45 دقيقة ويمكن لأخيه بوبي رسمها في y = 60 دقيقة ، فكم عدد الدقائق التي سيستغرقونها إذا عملوا معًا؟

تمارين الكتابة

مثال ( PageIndex {119} )

اشرح كيف تجد قيم x حيث يكون التعبير المنطقي ( frac {x ^ 2 − x − 20} {x ^ 2−4} ) غير معرّف.

إجابه

ستختلف الإجابات ، ولكن يجب أن تشير جميعها إلى تعيين وظيفة المقام على الصفر.

مثال ( PageIndex {120} )

اشرح كل الخطوات التي تتخذها لتبسيط التعبير المنطقي ( frac {p ^ 2 + 4p − 21} {9 − p ^ 2} ).

الاختيار الذاتي

ⓐ بعد الانتهاء من التمارين ، استخدم قائمة التحقق هذه لتقييم إتقانك لأهداف هذا القسم.

ⓑ إذا كانت معظم الشيكات الخاصة بك:

…بثقة. تهانينا! لقد حققت أهدافك في هذا القسم! فكر في مهارات الدراسة التي استخدمتها حتى تتمكن من الاستمرار في استخدامها. ماذا فعلت لتصبح واثقًا من قدرتك على فعل هذه الأشياء؟ كن دقيقا!

... مع بعض المساعدة. يجب معالجة هذا الأمر بسرعة لأن الموضوعات التي لا تتقنها تصبح حفرًا في طريقك إلى النجاح. الرياضيات متسلسلة - كل موضوع يعتمد على العمل السابق. من المهم التأكد من أن لديك أساسًا قويًا قبل المضي قدمًا. من يمكنك طلب المساعدة؟ زملائك في الفصل والمدرس هم موارد جيدة. هل يوجد مكان في الحرم الجامعي يتوفر فيه مدرسو الرياضيات؟ هل يمكن تحسين مهاراتك الدراسية؟

... لا - لم أفهم! هذا أمر بالغ الأهمية ويجب ألا تتجاهله. أنت بحاجة إلى الحصول على المساعدة على الفور وإلا ستغرق بسرعة. راجع مدربك في أقرب وقت ممكن لمناقشة وضعك. يمكنكما معًا وضع خطة لتزويدك بالمساعدة التي تحتاجها.


حساب التفاضل والتكامل الرسومية الجبرية العددية الطبعة الرابعة pdf

حساب التفاضل والتكامل: الرسوم البيانية ، العددية ، الجبرية ، إجابات الإصدار الثالث الفصل 4 تطبيقات المشتقات المثال 4.3 حساب التفاضل والتكامل: الإجابات الرسومية ، العددية ، الجبرية الفصل 4 تطبيقات تمرين المشتقات 4.3 1E الفصل 4 تطبيقات المشتقات التمرين 4.3 1QQ الفصل 4 تطبيقات المشتقات التمرين 4.3 1QR الفصل 4 تطبيقات المشتقات & # x02026 [قراءة المزيد. ] حول حساب التفاضل والتكامل: رسومية ، عددية ، جبري ، إجابات الطبعة الثالثة الفصل 4 تطبيقات المشتقات المثال 4.3


6.2 تمارين

يمكنك تنزيل ملف RMarkdown للقالب للبدء من هنا.

سنستكشف نمذجة LASSO باستخدام مجموعة بيانات Hitters في حزمة ISLR (المرتبطة بالكتاب الدراسي الاختياري). ستحتاج إلى تثبيت حزمة ISLR في وحدة التحكم أولاً. يجب عليك أيضًا تثبيت حزمة glmnet لأننا سنستخدمها لاحقًا لتركيب نماذج LASSO.

تحتوي مجموعة بيانات Hitters على عدد من الإحصائيات عن لاعبي البيسبول الرئيسيين في عام 1987. هدفنا هو بناء نموذج انحدار يتنبأ بمرتب اللاعب.

  1. تعرف على بيانات Hitters
    1. ألق نظرة خاطفة على الصفوف القليلة الأولى.
    2. كم عدد اللاعبين في مجموعة البيانات؟
    3. كم عدد المتنبئين المحتملين للراتب هناك؟

    تطوير بعض الحدس
    النموذج الطبيعي الذي نبدأ به هو النموذج الذي يحتوي على جميع المتنبئات الممكنة. يتناسب النموذج التالي مع المربعات الصغرى العادية (غير المعاقب عليها):

    1. استخدم علامة الإقحام لإجراء تحقق متقاطع من 7 أضعاف لتقدير خطأ الاختبار لهذا النموذج. استخدم المتوسط ​​المستقيم لعمود RMSE بدلاً من تربيع القيم أولاً. (لماذا 7؟ فكر في عدد الحالات في الطيات.)
    2. كيف تعتقد أن خطأ الاختبار المقدر سيتغير مع عدد أقل من المتنبئين؟
    3. صف بإيجاز كيف يمكن أن يساعدك إخراج إجراء التحديد التدريجي في اختيار نموذج أصغر (نموذج به عدد أقل من المتنبئين).
    4. يتوافق هذا النموذج مع المربعات الصغرى العادية مع حالة خاصة من المربعات الصغرى المعاقب عليها. ما قيمة ( لامدا ) في هذه الحالة الخاصة؟
    5. مع زيادة ( lambda ) ، ماذا تتوقع أن يحدث لعدد المتنبئين الذين لا يزالون في النموذج؟

    الكود أدناه يناسب نموذج لاسو مع ( لامدا = 10 ). تم تحديد قيمة ( lambda ) في وسيطة tuneGrid. تحدد alpha = 1 طريقة LASSO على وجه التحديد (طريقة glmnet لها أغراض أخرى).

    قم بملاءمة اللاسو باستخدام ( لامدا = 100 ).

    كم عدد المتغيرات المتبقية في نموذج لاسو مع ( لامدا = 100 )؟ هل هذا النموذج "أكبر" أم أصغر من LASSO مع ( lambda = 10 )؟ كيف تقارن معاملات المتغيرات بالمتغيرات المقابلة في نموذج المربعات الصغرى و LASSO مع ( lambda = 10 )؟

    لاسو لمجموعة متنوعة من ( لامدا )
    هناك عدد لا نهائي من ( lambda ) يمكننا استخدامها. سيكون من الممل للغاية فحص هذه واحدة في كل مرة. الكود التالي يناسب نماذج LASSO عبر ملف شبكة من قيم ( لامدا ) وعمل مخطط ملخص لتقديرات المعامل كدالة لـ ( لامدا ).

    • كل خط ملون يتوافق مع متنبئ مختلف. يشير الرقم الصغير الموجود على يسار كل سطر إلى متنبئ من خلال موقعه في أسماء rownames (lasso_mod $ finalModel $ beta).
    • يعكس المحور x نطاق قيم ( lambda ) المختلفة التي تم أخذها في الاعتبار في lasso_mod (متجه lambdas الذي أنشأناه).
    • في كل ( لامدا ) ، يعكس المحور الصادي تقديرات المعامل للمتنبئين في نموذج لاسو المقابل.
    • في كل ( lambda ) ، تشير الأرقام الموجودة في الجزء العلوي من المؤامرة إلى عدد المتنبئين المتبقيين في النموذج المقابل.

    يمكننا تكبير المؤامرة عن طريق تعيين حدود المحور y للانتقال من -10 إلى 10 باستخدام ylim على النحو التالي. قارن سطور المتغيرين 6 و 15. ما هما المتغيرين 6 و 15؟ أيهما يبدو متغيرًا أكثر "أهمية" أو "ثباتًا"؟ هل هذا منطقي في السياق؟

    قطف ( لامدا )
    من أجل اختيار ( lambda ) (ومن ثم نموذج LASSO) هو "الأفضل" ، يمكننا مقارنة معدل خطأ السيرة الذاتية المكون من 7 أضعاف لكل نموذج. لقد فعلت علامة الإقحام ذلك لنا بالفعل عندما قامت بتدريب النموذج. يمكننا إلقاء نظرة على قطعة من تلك النتائج:

    1. علق على شكل الحبكة. تنخفض RMSE في البداية ثم تبدأ في الصعود مرة أخرى. لماذا تعتقد ذلك؟
    2. تقريبًا ، ما قيمة ( لامدا ) التي ينتج عنها أفضل نموذج؟

    تشير هذه المؤامرة إلى أننا جربنا العديد من قيم ( lambda ) التي كانت سيئة جدًا. (لماذا؟) دعونا نلائم نماذج LASSO عبر شبكة أفضل من قيم ( lambda ). قم بتعديل الكود السابق لاستخدام الشبكة التالية وإعادة صنع lasso_mod والمؤامرة السابقة:

    الانتقاء ( لامدا ): حساب عدم اليقين
    نشأت كل نقطة في المخطط السابق من أخذ متوسط ​​RMSE على مدى 7 تكرارات عبر التحقق من الصحة. تحتوي تقديرات RMSE السبعة هذه على انحراف معياري وخطأ معياري أيضًا. يمكنك استخدام دالة best_lambdas () المخصصة لعمل رسم بياني للاختبار المقدر RMSE مقابل ( lambda ) الذي يعرض أيضًا معلومات حول الأخطاء القياسية.
    على وجه الخصوص ، تعرض الحبكة نقاطًا تتوافق تمامًا مع المؤامرة السابقة. تظهر الأسطر الإضافية خطأ معياريًا واحدًا أعلى وأسفل تقدير RMSE. في جوهرها ، يشير امتداد الخطوط إلى فاصل الثقة.
    تطبع الدالة best_lambdas () أيضًا معلومات حول بعض الاختيارات المعقولة لقيم ( lambda ) الجيدة.

    1. يُظهر الصف الأول من الإخراج المطبوع اختيارًا لـ ( lambda ) يسمى lambda_min ، و ( lambda ) حيث كان خطأ السيرة الذاتية المرصود هو الأصغر. يُظهر الصف الثاني خيارًا يسمى lambda_1se ، وهو أكبر ( lambda ) حيث يحتوي نموذج LASSO المقابل على خطأ في السيرة الذاتية لا يزال ضمن خطأ قياسي واحد من ذلك بالنسبة لـ LASSO باستخدام lambda_min. اشرح لماذا قد نستخدم LASSO مع lambda_1se بدلاً من lambda_min.
    2. كيف يمكن مقارنة RMSE المقدرة من خلال CV لهذه النماذج بنموذج المربعات الصغرى العادية الأصلية في التمرين 2؟

    انظر إلى معاملات نماذج LASSO المقابلة لكلا خياري ( lambda ). كيف تختلف المعاملات بين lambda_min و lambda_1se؟ هل تبدو معاملات أحد النماذج أكثر منطقية من حيث السياق؟ لا يمتلك المدرب فهمًا عميقًا بما يكفي للبيسبول ، لكن قد تفعل ذلك!


    برمجة التطبيق العملي

    لقد رأينا في التمرين السابق أن إيجاد حل دقيق لمشكلة البائع المتجول يستغرق وقتًا طويلاً للغاية ، ويستغرق وقتًا طويلاً ا(ن!). البديل هو الكشف عن مجريات الأمور التي تقدم حلاً جيدًا بشكل معقول بسرعة. أحد هذه الأساليب هو & # 8220 أقرب جيران: & # 8221 اختر نقطة انطلاق ، ثم في كل خطوة اختر أقرب نقطة لم تتم زيارتها ، وأضفها إلى الجولة الحالية وقم بتمييزها ، وكرر ذلك حتى لا توجد نقاط غير مرغوب فيها.

    مهمتك هي كتابة برنامج يحل مشكلة البائع المتجول باستخدام أقرب مجريات الأمور. عند الانتهاء ، نرحب بقراءة الحل المقترح أو تشغيله ، أو لنشر الحل الخاص بك أو مناقشة التمرين في التعليقات أدناه.

    شارك هذا:

    مثله:

    متعلق ب

    6 ردود على & # 8220 بائع متجول: أقرب الجار & # 8221

    [& # 8230] براكسيس & # 8211 بائع متجول: أقرب الجار بواسطة Remco Niemeijer في اليوم & # 8217s تمرين براكسيس للبرمجة ، يتعين علينا تنفيذ خوارزمية أسرع بكثير للسفر [& # 8230]

    بيانات [& # 8230]. فيما يتعلق ببرمجة التطبيق العملي ، اقترحوا حل المشكلة باستخدام القوة الغاشمة ، واستخدام أقرب الجيران (تبسيط لـ [& # 8230]

    حل في بايثون ، بما في ذلك المقارنة مع القوة الغاشمة. تعليقات على مدونتي على http://wrongsideofmemphis.wordpress.com/2010/03/16/travelling-salesman/

    استيراد عشوائي
    استيراد أدوات itertools
    مشغل الاستيراد
    استيراد التاريخ والوقت

    def random_cities (عدد):
    & # 8221 & # 8217 إنشاء عدد من المدن الواقعة في أماكن عشوائية & # 8221 & # 8217

    المدن = [(random.randrange (0، MAX_X) ،
    random.randrange (0، MAX_Y))
    لأني في النطاق (رقم)]

    def path_lenght (مسار):
    & # 8221 & # 8217 احصل على طول المسار & # 8221 & # 8217
    الطول = 0
    بالنسبة إلى i in xrange (len (path) & # 8211 1):
    # اجمع المسافة بين مدينتين
    lenght + = abs (معقد (المسار [i] [0] ، المسار [i] [1])
    & # 8211 معقدة (المسار [i + 1] [0] ، المسار [i + 1] [1]))

    def find_path_bruteforce (المدن):
    & # 8221 & # 8217 أوجد أصغر مسار باستخدام القوة الغاشمة & # 8221 & # 8217

    للمسار في itertools.permutations (المدن ، لين (المدن)):
    # احصل على طول المسار مع إضافة نقطة العودة
    total_path = المسار + (المسار [0] ،)
    lenght = path_lenght (total_path)
    lenghts.append ((total_path، lenght))

    # احصل على الحد الأدنى
    lenghts.sort (مفتاح = عامل تشغيل. عنصر عنصر (1))
    طول العودة [0]

    def find_path_nearest (المدن):
    & # 8221 & # 8217 العثور على أقرب neibour & # 8221 & # 8217

    أطوال = []
    للمدينة في المدن:
    الطول = 0
    الفعلي_المدن = المدن [:]
    real_city = active_cities.pop (active_cities.index (city))
    المسار = [المدينة الفعلية ،]
    # البحث عن أقرب neibour
    بينما الفعلي_المدن:
    min_lenght = []
    للمدينة التالية بالمدينة الفعلية:
    min_lenght.append ((next_city، abs (مجمع (مدينة [0]، مدينة [1])
    & # 8211 مجمع (next_city [0] ، next_city [1]))))
    # احصل على أقرب neibor
    min_lenght.sort (مفتاح = عامل تشغيل. عنصر عنصر (1))

    real_city = min_lenght [0] [0]
    lenght + = min_lenght [0] [1]
    real_cities.pop (real_cities.index (real_city))
    path.append (المدينة الفعلية)

    # أكمل الرحلة مع المدينة الأولى
    path.append (مدينة)

    # احصل على الحد الأدنى
    lenghts.sort (مفتاح = عامل تشغيل. عنصر عنصر (1))
    طول العودة [0]

    إذا __name__ == & # 8216__main __ & # 8217:
    بالنسبة لـ i في النطاق (3 ، 10):
    print & # 8216 عدد المدن: & # 8216 ، ط
    المدن = مدن عشوائية (ط)


    8.1E: تمارين - رياضيات

    هنا يمكنك أن تطلب من مجتمعنا إنشاء مورد يلبي مواصفاتك.

    11 يونيو 2021 كايلي من أستراليا (AUS) - جميع الولايات ، أستراليا (AUS) - طلب جديد:

    اسم الزوايا (الهندسة) السنة 5 منهج نيو ساوث ويلز 5 دروس متسلسلة

    التفاصيل أحتاج إلى تسلسل من 5 درس 45 دقيقة لطالب في الصف الخامس. أعمل في ssp والبرنامج بشكل أساسي لطلاب المدارس الثانوية. أحتاجها لتتوافق مع منهج NSW

    المصدر: للطالب ، للمعلم

    الموقع أستراليا (AUS) - جميع الولايات ، أستراليا (AUS) - جديد

    16 مايو 2020 ميلاني من أستراليا (AUS) - أستراليا الغربية (WA) ، سأل وا:

    اسم حزم العمل الصحية لمنهج K-3 WA

    التفاصيل أبحث عن حزم متوافقة مع منهج WA والتي تغطي كامل المحتوى المدرج في المناهج الصحية لـ K-3. سيتم إرسالهم للتعلم عن بعد.

    الموقع أستراليا (AUS) - أستراليا الغربية (WA) ، Wa

    الموضوع الصحة، الصحة واللياقة البدنية، التثقيف الصحي، الأولويات الصحية في أستراليا، الأكل الصحي، أسلوب الحياة الصحي، الحياة الصحية، المنهج الدراسي

    مستوى الصف التمهيدي K ، روضة الأطفال ، السنة 1 ، السنة 2 ، السنة 3

    نتائج 1.0 ، تغطي كل منطقة التعلم

    18 ديسمبر 2017 كيبريا من نيو ساوث ويلز سأل:

    اسم NSW School-Year 3 إلى Year 6 القراءة موارد واختبار الرياضيات

    التفاصيل نحن نبحث عن موارد مخصصة عالية الجودة لمناهج التعليم في نيو ساوث ويلز من السنة الثالثة إلى السنة السادسة من أجل 1. القراءة 2. الرياضيات 3. موارد القدرة العامة واختبارها

    المصدر: للمعلم

    مستوى الصف السنة 3 ، السنة 4 ، السنة 5 ، السنة 6

    13 ديسمبر 2017 كيبريا من نيو ساوث ويلز سأل:

    اسم NSW School-Year 3 إلى Year 6 القراءة موارد واختبار الرياضيات

    التفاصيل نحن نبحث عن موارد مخصصة عالية الجودة لمناهج التعليم في نيو ساوث ويلز من السنة الثالثة إلى السنة السادسة من أجل 1. القراءة 2. الرياضيات 3. موارد القدرة العامة واختبارها


    وظائف المنطق NumPy: دالة isclose ()

    تُستخدم الدالة isclose () لإرجاع مصفوفة منطقية حيث تكون مصفوفتان متساويتين من حيث العنصر ضمن تفاوت.

    قيم التسامح موجبة ، وعادة ما تكون أرقام صغيرة جدًا.
    يضاف الفرق النسبي (rtol * abs (b)) والفرق المطلق atol معًا للمقارنة بالفرق المطلق بين a و b.

    إصدار: 1.15.0

    اسم وصف أنواع البيانات مطلوب /
    اختياري
    أ ، ب مصفوفات الإدخال للمقارنة.
    صفيف_مثل
    مطلوب
    rtol معامل التسامح النسبي. يطفو مطلوب
    أتول معامل التسامح المطلق. يطفو مطلوب
    يساوي ما إذا كان سيتم مقارنة NaN على قدم المساواة. إذا كان هذا صحيحا،
    سيتم اعتبار NaN's في a مساوية لـ NaN في b في مصفوفة الإخراج.
    منطقي مطلوب

    عائدات:
    y: array_like - تُرجع مصفوفة منطقية حيث يتساوى a و b ضمن التسامح المحدد.
    إذا كان كل من a و b حجميًا ، يتم إرجاع قيمة منطقية واحدة.

    ملاحظات:
    للقيم المحدودة ، يستخدم isclose المعادلة التالية لاختبار ما إذا كانت قيمتا النقطة العائمة متساويتين.


    Learntofish & # 039s Blog

    نشره إد في 20 سبتمبر 2009

    في ما يلي سوف أشرح ما تعنيه البرمجة الشيئية في Java. وسترى أنه من السهل أن تفهم بمجرد فهمك لمفهوم موضوع. أنا أشجعك على نسخ الكود وتشغيله في جافا.

    ما هو الشيء؟
    التعريف: يتميز الكائن في البرمجة الشيئية بـ
    أ) لها صفات (الخصائص)
    ب) أساليب تفعل شيئًا ما بالسمات (على سبيل المثال تغييرها)

    على سبيل المثال ، يعد Homer Simpson كائنًا:
    أ) صفاته: الاسم ، العمر ، الجنس ، إلخ.
    ب) وهناك طرق يمكنك تطبيقها على الكائن:
    على سبيل المثال يمكنك طلب اسم Homer Simpson & # 8217s أو يمكنك السماح له بعيد ميلاده الذي يغير عمره.

    ما هو الفصل؟
    هناك أنواع مختلفة من الأشياء ، على سبيل المثال:
    & # 8211 هناك شيء مشترك بين ماري كوري وإسحاق نيوتن وإيمي نوثر. هم أشخاص. نقول أنها أشياء من فئة & # 8220Person & # 8221.
    & # 8211 التفاح والموز والمانجو: هذه أشياء من الفئة & # 8220Fruit & # 8221.
    & # 8211 سترة ، بلوزة ، كنزة صوفية ، بنطلون: هذه أشياء من الفصل & # 8220 ملابس & # 8221.

    دع & # 8217s يصبح عمليًا واكتب الكود التالي في Java (لنسخ الكود: اذهب إلى نافذة الكود المصدري أدناه وأشر إلى الزاوية العلوية اليمنى. هناك ، انقر فوق الرمز الأبيض):

    دع & # 8217s نفحص البرنامج:
    & # 8211 في السطر 01 نعلن فئة & # 8220Person & # 8221.
    & # 8211 في السطر 03-05 نحدد نوع السمات (الخصائص) التي تمتلكها كائناتنا. هنا ، يجب أن يكون لأشياءنا اسم وعمر.
    & # 8211 في السطر 07-27 نحدد الطرق التي يمكن تطبيقها على كائناتنا على سبيل المثال في السطر 08-10 الطريقة اسم مجموعة() يعطي أشياءنا اسما.
    & # 8211 تبدأ الطريقة () الرئيسية الخاصة بنا (أو البرنامج) في السطر 29.

    لا ينتج عن تجميع الكود أعلاه أي إخراج لوحدة التحكم نظرًا لأننا لم نكتب أي شيء في طريقة main () حتى الآن. في ما يلي سنضيف رمزًا إلى طريقة main ().

    إنشاء كائن وتحديد سماته

    دع & # 8217s نفحص الكود:
    & # 8211 هنا ، في السطر 04 ، نقوم بإنشاء كائن & # 8220father & # 8221 من الفصل & # 8220Person & # 8221 عن طريق الكتابة
    والد الشخص = شخص جديد ()
    بشكل عام ، نقوم بإنشاء كائن عن طريق الكتابة
    كائن الفئة = فئة جديدة ()
    الى جانب ذلك ، الطريقة شخص() يسمى a & # 8220constructor & # 8221. المُنشئ له اسمه لأسباب واضحة: نحن نبني كائنًا.

    & # 8211 في السطر 07-08 ، نطبق طرقًا على الكائن & # 8220father & # 8221. نعطيه اسما وعمرا:
    father.setName (& # 8220Homer & # 8221)
    father.setAge (40)

    بشكل عام ، يتم تطبيق طريقة على كائن عن طريق كتابة:
    طريقة الكائن ()
    على وجه الخصوص ، لقد لاحظت النقطة. عندما تريد تطبيق طريقة على كائن ما ، يمكنك استخدام النقطة.

    إظهار السمات على إخراج وحدة التحكم
    لا يزال تجميع الكود أعلاه يفوز & # 8217t يعطينا أي إخراج على وحدة التحكم. دع & # 8217s نضيف بعض التعليمات البرمجية إلى الطريقة الرئيسية (السطر 10-12):

    الآن نريد من الأب أن يخبرنا باسمه وعمره. هذا هو السبب في أننا نطبق الأساليب في السطر 11-12 getName () و getAge () لأبينا وجوهنا. ينتج عن تجميع الكود إخراج وحدة التحكم:
    اسمي هوميروس.
    عمري 40 سنة.

    تمارين:
    1 أ) باستخدام فئة & # 8220Person & # 8221 من الأعلى ، قم بإنشاء كائن & # 8220daughter & # 8221.
    1 ب) أعطها الاسم & # 8220Lisa Simpson & # 8221 التي تبلغ من العمر 8 سنوات.
    1c) & # 8220daughter & # 8221 تخبرنا باسمها وعمرها عبر إخراج وحدة التحكم.
    1 د) باستخدام فئة & # 8220Person & # 8221 من الأعلى ، أنشئ كائنًا & # 8220son & # 8221 باسم السمات = & # 8221Bart Simpson & # 8221 والعمر = 8.
    1 هـ) اجعل الابن يخبرنا باسمه. بعد ذلك ، قم بتطبيق الطريقة عيد الميلاد() لابنه.

    2 أ) أنشئ فئة & # 8220Fruit & # 8221 باستخدام طريقة () الرئيسية.
    2 ب) يجب أن تحتوي كائنات هذه الفئة على السمة التالية: اللون
    الفصل لديه الأساليب setColor () و getColor ().
    2 ج) إنشاء كائن تفاحة. اضبط لونه على & # 8220red & # 8221. ثم اعرض اللون على خرج وحدة التحكم باستخدام ملف getColor () طريقة.

    خرج وحدة التحكم لـ 1c) هو: اسمي ليزا سيمبسون. انا عمرى 8 سنوات.

    بالنسبة إلى 1d) و 1e) يكون خرج وحدة التحكم هو:
    اسمي بارت سمبسون.
    لقد & # 8217ve للتو عيد ميلادي! الآن عمري 9 سنوات.
    2 أ) و 2 ب)

    بالنسبة إلى 2c) ، أضف الكود التالي إلى طريقة main ():

    هنا ، نحصل على إخراج وحدة التحكم: لوني: أحمر.

    مراجع:
    1) مفاهيم البرمجة الشيئية
    برنامج تعليمي بواسطة Sun Microsystems ، مطور Java

    4) أساسيات اللغة الشيئية
    برنامج تعليمي أكثر تقدمًا بواسطة javaworld.com

    5) Eclipse و Java لمجموع المبتدئين
    فيديو تعليمي عن كيفية استخدام Eclipse مع مقدمة عن البرمجة الشيئية


    16.7.1. نماذج معمارية¶

    في نظام التوصية المدرك للتسلسل ، يرتبط كل مستخدم بتسلسل بعض العناصر من مجموعة العناصر. دع (S ^ u = (S_1 ^ u،. S_ <| S_u |> ^ u) ) يشير إلى التسلسل المرتب. الهدف من Caser هو التوصية بالعنصر من خلال مراعاة الأذواق العامة للمستخدم بالإضافة إلى النية قصيرة المدى. لنفترض أننا أخذنا عناصر (L ) السابقة في الاعتبار ، يمكن إنشاء مصفوفة تضمين تمثل التفاعلات السابقة للخطوة الزمنية (t ):

    حيث ( mathbf في mathbb^) يمثل تضمين العناصر و ( mathbf_i ) يشير إلى (i ^ mathrm) صف. ( mathbf^ <(u، t)> in mathbb^) يمكن استخدامها لاستنتاج الاهتمام العابر للمستخدم (u ) في الوقت-الخطوة (t ). يمكننا عرض مصفوفة الإدخال ( mathbf^ <(u ، t)> ) كصورة هي مدخلات المكونين التلافيفيين التاليين.

    تحتوي الطبقة التلافيفية الأفقية على (د ) مرشحات أفقية ( mathbf^ j in mathbb^، 1 leq j leq d ، h = <1 ،. L > ) ، والطبقة التلافيفية الرأسية بها (d ') مرشحات عمودية ( mathbf^ j in mathbb^ ، 1 leq j leq d '). بعد سلسلة من العمليات التلافيفية والتجميعية ، نحصل على المخرجين:

    حيث ( mathbf في mathbb^ d ) هو ناتج الشبكة التلافيفية الأفقية و ( mathbf'in mathbb^) هو ناتج الشبكة التلافيفية العمودية. للتبسيط ، نحذف تفاصيل عمليات الالتفاف والتجمع. يتم تسلسلها وتغذيتها في طبقة شبكة عصبية متصلة بالكامل للحصول على مزيد من التمثيلات عالية المستوى.

    حيث ( mathbf في mathbb^) هي مصفوفة الوزن و ( mathbf في mathbb^ ك ) هو التحيز. المتجه المكتسب ( mathbf في mathbb^ k ) هو تمثيل لنية المستخدم قصيرة المدى.

    أخيرًا ، تجمع وظيفة التنبؤ بين الذوق قصير المدى والذوق العام للمستخدمين معًا ، والذي يتم تعريفه على النحو التالي:

    (16.7.4) ¶ [ hat_ = mathbf_i cdot [ mathbf، mathbf

    _u] ^ top + mathbf'_أنا،]

    حيث ( mathbf في mathbb^) عنصر آخر يتضمن مصفوفة. ( mathbf'in mathbb^ n ) هو الانحياز الخاص بالعنصر. ( mathbf

    في mathbb^) هو المستخدم الذي يقوم بتضمين المصفوفة لأذواق المستخدمين العامة. ( mathbf

    _u in mathbb^ ) هو (u ^ mathrm) صف من (P ) و ( mathbf_i in mathbb^ <2k> ) هو (i ^ mathrm) صف من ( mathbf) .

    يمكن تعلم النموذج باستخدام BPR أو Hinge Loss. تظهر بنية Caser أدناه:

    شكل 16.7.1 رسم توضيحي لنموذج Caser ¶

    نقوم أولاً باستيراد المكتبات المطلوبة.


    8.1E: تمارين - رياضيات

    تحليل التقديم مع بيانات SNP

    برنامج تعليمي حول تحليل التهجين والتقدم باستخدام بيانات SNP بواسطة ميلان مالينسكي ([email protected]) ومايكل ماتشينير

    يعد الاختلاط بين المجموعات السكانية والتهجين بين الأنواع أمرًا شائعًا وغالبًا ما تكون الشجرة المتفرعة غير كافية لالتقاط تاريخها التطوري (مثال). باترسون D ، والمعروف أيضًا باسم ABBA-BABA ، والتقدير المرتبط بجزء الخليط F، يشار إليها باسم نسبة f4 تُستخدم بشكل شائع لتقييم دليل تدفق الجينات بين السكان أو الأنواع وثيقة الصلة في مجموعات البيانات الجينومية. وهي تستند إلى فحص أنماط مشاركة الأليل عبر المجموعات السكانية أو الأنواع ذات الصلة الوثيقة. على الرغم من أنها قد تم تطويرها في إطار جيني للسكان ، إلا أنه يمكن تطبيق الأساليب بنجاح للتعلم حول التهجين والإدخال داخل مجموعات من الأنواع وثيقة الصلة ، طالما أن الافتراضات الجينية المشتركة للسكان تحمل - أي أن (أ) الأنواع تتشارك في قدر كبير الاختلاف الجيني بسبب السلالة المشتركة وفرز النسب غير المكتمل (ب) الطفرات المتكررة والعائدة في نفس المواقع لا تذكر و (ج) معدلات الاستبدال موحدة عبر الأنواع.

    كما تم استخدام إحصائيات D الخاصة باترسون والإحصاءات ذات الصلة لتحديد المواقع المُدخلة عن طريق تمرير عمليات مسح النوافذ على طول الجينوم ، أو عن طريق حساب هذه الإحصائيات لمناطق جينومية قصيرة معينة. نظرًا لأن إحصائية D نفسها لها تباين كبير عند تطبيقها على النوافذ الجينومية الصغيرة ولأنها مقدر ضعيف لمقدار التقديم ، فقد تم تصميم الإحصائيات الإضافية المتعلقة بنسبة f4 خصيصًا للتحقيق في تواقيع الإدخال في النوافذ الجينومية على طول الكروموسومات. وتشمل هذه الإحصائيات Fد (مارتن وآخرون ، 2015) ، امتداده Fد (مالينسكي وآخرون ، 2015) ، وجزء المسافة دF (فايفر وأمبير كابان ، 2019).

    في هذا البرنامج التعليمي ، سنستخدم البيانات المحاكاة لإثبات أنه ، في ظل تدفق الجينات ، قد لا تتوافق بعض علاقات الأنواع المستنتجة مع أي علاقات بيولوجية حقيقية. ثم سنستخدم Dsuite ، وهي حزمة برامج تنفذ باترسون D والإحصاءات ذات الصلة بطريقة سهلة الاستخدام وفعالة من الناحية الحسابية. سيسمح لنا هذا بتحديد الأصناف المختلطة. أثناء استكشاف Dsuite ، سنقوم أيضًا بتعلم أو مراجعة المفاهيم المتعلقة بالتطبيق والحساب وتفسير D والإحصاءات ذات الصلة. بعد ذلك ، نطبق إحصائيات النافذة المنزلقة لتحديد مواقع معينة مُدخلة في مجموعة بيانات حقيقية لأسماك البلطي في ملاوي. أخيرًا ، ننظر إلى نفس البيانات التي تم استخدامها لاستدلال شجرة الأنواع باستخدام SVDQuartets في البرنامج التعليمي Species-Tree Inference باستخدام بيانات SNP لمعرفة ما إذا كان بإمكاننا الوصول إلى نفس الاستنتاجات مثل مخطوطة 2016 التي استخدمت مجموعة بيانات أكثر محدودية مع عدد أقل من الأنواع.

    يمكن للطلاب المهتمين أيضًا تطبيق لوحة النسب للتحقيق في حالة معطلة للأنواع الهجينة.

    Dsuite: يسمح برنامج Dsuite بالحساب السريع لملفات د- إحصائية من بيانات SNP بتنسيق VCF. يعد البرنامج مفيدًا بشكل خاص لأنه يحسب تلقائيًا ملف د- إحصائية لجميع الأنواع الثلاثية الممكنة ، اختياريًا أيضًا بطريقة تتوافق مع شجرة الأنواع التي يوفرها المستخدم. تتوفر إرشادات التنزيل والتثبيت على نظامي التشغيل Mac OS X و Linux على https://github.com/millanek/Dsuite. التثبيت على Windows غير مدعوم ، ولكن يمكن لمستخدمي Windows استخدام ملفات الإخراج المتوفرة لمعرفة كيفية رسم وتحليل إخراج Dsuite.

    شجرة التين: يجب أن يكون برنامج FigTree مثبتًا بالفعل إذا اتبعت الدروس التعليمية Bayesian Phylogenetic Inference ، أو تقدير وقت الاختلاف الوراثي أو غيرها من البرامج التعليمية. إذا لم يكن كذلك ، يمكنك تنزيله لنظام التشغيل Mac OS X و Linux و Windows من https://github.com/rambaut/figtree/releases.

    بيبوبجين 3: (مع التبعيات ، وإلغاء msprime) يوفر Pypopgen3 العديد من أدوات الوراثة السكانية المفيدة ، بما في ذلك ، والأهم من ذلك ، غلاف لبرنامج msprime للسماح بمحاكاة ملائمة لبيانات النشوء والتطور.

    1. استنتاج شجرة الأنواع وتدفق الجينات من مجموعة بيانات محاكاة

    1.1 محاكاة البيانات التطورية مع msprime

    تتمثل إحدى الصعوبات في تطبيق ومقارنة الطرق المختلفة في علم الجينوم التطوري وعلم الجينوميات في أننا نادرًا ما نعرف الإجابة الصحيحة. إذا أعطتنا الأساليب إجابات متضاربة ، أو أي إجابات ، كيف نعرف ما إذا كان يمكننا الوثوق بها؟ أحد الأساليب التي غالبًا ما تكون مفيدة هو استخدام البيانات المحاكاة. تتيح لنا معرفة الحقيقة معرفة ما إذا كانت الأساليب التي نستخدمها منطقية.

    واحدة من أسرع حزم البرامج المتوفرة لمحاكاة بيانات النشوء والتطور هي msprime المستند إلى coalescent (المخطوطة). يتم تقديم مخطوطة msprime والبرنامج نفسه في الإطار الجيني للسكان. ومع ذلك ، يمكننا استخدامه لإنتاج بيانات النشوء والتطور. هذا لأنه ، من وجهة نظر النظر إلى البيانات الجينية البحتة ، لا يوجد تمييز أساسي بين مجموعة من المجموعات التماثلية لنوع واحد ومجموعة من الأنواع المختلفة. إن عمليات الأنساب التي تحدث عبر مجموعات سكانية مختلفة هي في الواقع نفس العمليات التي تحدد العلاقات الجينية على طول جينوم أي نوع قد ينشأ. سنعود إلى موضوع السلسلة المتصلة بين علم الوراثة السكانية وعلم الوراثة فيما بعد.

    لقد قمنا بمحاكاة بيانات SNP لـ 20 نوعًا بتنسيق VCF ، فردين من كل نوع. The species started diverging 1 million years ago, with effective population sizes on each branch set to 50,000. Both the recombination and mutation rates were set to 1e-8 and 20Mb of data were simulated. Because these simulations take some time to run, we have the ready simulated data available for you. First a simulation without gene-flow (VCF, true tree: image, newick, json), and second, a simulation where five gene-flow events have been added to a tree (VCF, true tree with gene-flow: image, newick, json). Details for how to generate such simulated datasets are provided below.

    Generating simulated phylogenomic data with msprime

    It is in principle possible to simulate data from an arbitrary phylogeny with msprime, but specifying the phylogenetic tree directly in the program is complicated. Therefore, a number of 'helper' wrapper programs have been developed that can make this task much easier for us. For this exercise, we use Hannes Svardal's pypopgen3. After installing pypogen3 and its dependencies, using the instructions on the webpage, we simulated the data using the following code:

    Note that if you run this code yourselves, the data and the trees that you get out will be somewhat different from the ones we prepared for you, because the trees are randomly generated and the coalescent simulation run by msprime is also a stochastic process. Therefore, every simulation will be different. If you want to simulate more data using the trees we provided to you, you would replace the treetools.get_random_geneflow_species_tree commands with the following code to read the provided trees:

    1.2 Reconstructing phylogenies from simulated data

    Now we apply the phylogentic (or phylogenomic) approaches that we have learned to the simulated SNP data to see if we can recover the phylogentic trees that were used as input to the simulations. As in the tutorial on Species-Tree Inference with SNP Data, we are going to use algorithms implemented in PAUP*.

    Our msprime simulation did not use any specific substitution model for mutations, but simply designated alleles as 0 for ancestral and 1 for derived. The alleles are indicated in the fourth (REF) and fifth (ALT) column of the VCF as per the VCF file format. To use PAUP* we first need to convert the the VCF into the Nexus format, and this needs the 0 and 1 alleles to be replaced by actual DNA bases. We can use the vcf2phylip.py python script and achieve these steps as follows, first for the dataset simulated without gene-flow:

    Next, open the Nexus file chr1_no_geneflow_nt.min4.nexus in PAUP*, again making sure that the option "Execute" is set in the opening dialog, as shown in the screenshot.

    Then designate the outgroup (Data->Define_outgroup) as you learned in the tutorial on Species-Tree Inference with SNP Data.

    Then use the Neighbor Joining algorithm (Analysis->Neighbor-Joining/UPGMA) with default parameters to build a quick phylogeny.

    As you can see by comparison of the tree you just reconstructed (also below) against the input tree, a simple Neigbor Joining algorithm easily reconstructs the tree topology perfectly, and even the branch lengths are almost perfect.

    Click here to see the reconstructed NJ tree without gene-flow

    Now we repeat the same tree-reconstruction procedure for the simulation with gene-flow, starting with file format conversion:

    Then load the file with_geneflow_nt.min4.nexus into PAUP*, again making sure the option "Execute" is set, then designate the outgroup, and finally run the Neighbor Joining tree reconstruction. You should get a tree like the one below:

    An examination of this reconstructed tree reveals that in this case we did not recover the topology of the true tree used as input to the simulation. Unlike in the true tree, in the reconstructed tree species S14 is "pulled outside" the group formed by S13,S15,S16 . This is most likely because of the gene-flow that S14 received from S00 . This is a typical pattern: when one species from within a group receives introgression from another group, it tends to be "pulled out" like this in phylogenetic reconstruction. One argument that could be made here is that the Neighbor Joining algorithm is outdated, and that perhaps newer, more sophisticated, methods would recover the correct tree. You can now try to apply SVDQuartets in PAUP*, and also try any of the other phylogenomic methods you know to see if any of these will succeed.

    Click here to see the reconstructed SVDQuartets tree with gene-flow

    As you can see, the topology is in fact different from the Neighbor Joining, but also is not correct ( S13,S14 should not be sister taxa, also S10 and S11 are swapped) .

    1.3 Testing for gene-flow in simulated data

    Under incomplete lineage sorting alone, two sister species are expected to share about the same proportion of derived alleles with a third closely related species. Thus, if species "P1" and "P2" are sisters and "P3" is a closely related species, then the number of derived alleles shared by P1 and P3 but not P2 and the number of derived alleles that is shared by P2 and P3 but not P1 should be approximately similar. In contrast, if hybridization leads to introgression between species P3 and one out the two species P1 and P2, then P3 should share more derived alleles with that species than it does with the other one, leading to asymmetry in the sharing of derived alleles. These expectations are the basis for the so-called "ABBA-BABA test" (first described in the Supporting Material of Green et al. 2010) that quantifies support for introgression by the د-statistic. Below is an illustration of the basic principle.

    In short, if there is gene-flow between P2 <-> P3, there is going to be an excess of the of the ABBA pattern, leading to positive D statistics. In contrast, gene-flow between P1 <-> P3 would lead to a an excess of the BABA pattern and a negative D statistic. However, whether a species is assigned in the P1 or P2 position is arbitrary, so we can always assign them so that P2 and P3 share more derived alleles and the D statistic is then bounded between 0 and 1. There is also a related and somewhat more complicated measure, the f4-ratio, which strives to estimate the admixture proportion in percentage. We will not go into the maths here - if you are interested, have a look at the Dsuite paper.

    The Dsuite software has several advantages: it brings several related statistics together into one software package, has a straightforward workflow to calculate the D statistics and the f4-ratio for all combinations of trios in the dataset, and the standard VCF format, thus generally avoiding the need for format conversions or data duplication. It is computationally more efficient than other software in the core tasks, making it more practical for analysing large genome-wide data sets with tens or even hundreds of populations or species. Finally, Dsuite implements the calculation of the fdM و f-branch statistics for the first time in publicly available software.

    To calculate the D statistics and the f4-ratio for all combinations of trios of species, all we need is the file that specifies what individuals belong to which population/species - we prepared it for you: species_sets.txt. Such a file could be simply prepared manually, but, in this case we can save ourselves the work and automate the process using a combination of bcftools and awk :

    Something similar to the above can be useful in many cases, depending on how the individuals are named in your VCF file.

    Then, to familiarize yourself with Dsuite, simply start the program with the command Dsuite . When you hit enter, you should see a help text that informs you about three different commands named "Dtrios", "DtriosCombine", and "Dinvestigate", with short descriptions of what these commands do. Of the three commands, we are going to focus on Dtrios, which is the one that calculates the د-statistic for all possible species trios.

    To learn more about the command, type Dsuite Dtrios and hit enter. The help text should then inform you about how to run this command. There are numerous options, but the defaults are approprite for a vast majority of use-cases. All we are going to do is to provide a run name using the -n option, the correct tree using the -t option, and use the -c option to indicate that this is the entire dataset and, therefore, we don't need intermediate files for "DtriosCombine".

    1.3.1 Do we find geneflow in data simulated without geneflow?

    We run Dsuite for the dataset without gene-flow as follows:

    The run takes about 50 minutes. Therefore, we already put the output files for you in the data folder. Let's have a look at the first few lines of species_sets_no_geneflow_BBAA.txt :

    Each row shows the results for the analysis of one trio. For example in the first row, species S01 was used as P1, S02 was considered as P2, and S00 was placed in the position of P3. Then we see the D statistic, associated Zscore and p-value, the f4-ratio estimating admixture proportion and then the counts of BBAA sites (where S01 and S02 share the derived allele) and then the counts of ABBA and BABA sites. As you can see, ABBA is always more than BABA and the D statistic is always positive because Dsuite orients P1 and P2 in this way. Since these results are for coalescent simulations without gene-flow, the ABBA and BABA sites arise purely through incomplete lineage sorting and the difference between them is purely random - therefore, even though the D statistic can be quite high (e.g. up to 8% on the last line), this is not a result of gene flow.

    السؤال رقم 1: Can you tell why the BBAA, ABBA, and BABA numbers are not integer numbers but have decimal positions?

    Click here to see the answer

    Integer counts of ABBA and BABA sites would only be expected if each species would be represented only by a single haploid sequence. With diploid sequences and multiple samples per species, allele frequences are taken into account to weigh the counts of ABBA and BABA sites as described by equations 1a to 1c of the Dsuite paper.

    السؤال 2: How many different trios are listed in the file? Are these all possible (unordered) trios?

    Click here to see the answer

    Because each trio is listed on a single row, the number of trios in file species_sets_no_geneflow_BBAA.txt is identical to the number of lines in this file. This number can easily be counted using, e.g. the following command:

    You should see that the file includes 1140 lines and therefore results for 1140 trios. Given that the dataset includes (except the outgroup species) 20 species and 3 of these are required to form a trio, the number of possible trios is

    In species_sets_no_geneflow_BBAA.txt , trios are arranged so that P1 and P2 always share the most derived alleles (BBAA is always the highest number). There are two other output files: one with the _tree.txt suffix: species_sets_no_geneflow_tree.txt where trios are arranged according to the tree we gave Dsuite, and a file with the _Dmin.txt suffix species_sets_no_geneflow_Dmin.txt where trios are arranged so that the D statistic is minimised - providing a kind of "lower bound" on gene-flow statistics. This can be useful in cases where the true relationships between species are not clear, as illustrated for example in this paper (Fig. 2a).

    Let's first see how the other outputs differ from the _tree.txt file, which has the correct trio arrangments. :

    There is one difference in the _BBAA.txt ile. Because of incomplete lineage sorting being a stochastic (random) process, we see that S08 and S10 share more derived alleles than S09 and S10 , which are sister species in the input tree. If you look again at the input tree, you will see that the branching order between S08 , S09 and S10 is very rapid, it is almost a polytomy.

    A comparison of the _tree.txt file against the _Dmin.txt , which minimises the Dstatistic, reveals nine differences. However, the correct trio arrangements in all these cases are very clear.

    Next, let's look at the results in more detail, for example in R. We load the _BBAA.txt file and first look at the distribution of D values:

    There are some very high D statistics. In fact, the D statistics for 9 trios are >0.7, which is extremely high. So how is this possible in a dataset simulated with no geneflow?

    These nine cases arise because there is amost no incomplete lineage sorting among these trios almost all sites are BBAA - e.g. 179922 sites for the first trio, while the count for ABBA is only 1.5 and for BABA it is 0 . The D statistic is calculated as D = (ABBA-BABA)/(ABBA+BABA), which for the first trio would be D = (1.5-0)/(1.5+0)=1. So, the lesson here is that the D statistic is very sensitive to random fluctuations when there is a small number of ABBA and BABA sites. One certainly cannot take the D value seriously unless it is supported by a statistical test suggesting that the D is significanly different from 0. In the most extreme cases above, the p-value could not even be calculated, becuase there were so few sites. Those definitely do not represent geneflow. But in one case we see a p value of 0.0018. Well, that looks significant, if one considers for example the traditional 0.05 cutoff. So, again, how is this possible in a dataset simulated with no geneflow?

    In fact, there are many p values that are <0.05. For those who have a good understanding of statistics this will be not be suprising. This is because p values are uniformly distributed when the null hypopthesis is true. Therefore, we expect 5% of the (or 1 in 20) p-values, they will be <0.05. If we did a 1140 tests, we can expect 57 of them to be <0.05. Therefore, any time we conduct a large amount of statistical tests, we should apply a multiple testing correction - commonly used is the Benjamini-Hochberg (BH) correction which controls for the false discovery rate.

    However, even after applying the BH correction there are three p-values which look significant. These are all false discoveries. Here comes an important scientific lesson - that even if we apply statistical tests correctly, seeing a p-value below 0.05 is not a proof that the null hypothesis is false. All hypothesis testing has false positives and false negatives. It may be helpful to focus less on statistical testing and aim for a more nuanced understanding of the dataset, as argued for example in this Nature commentary.

    Therefore, we should also plot the f4-ratio, which estimates the proportion of genome affected by geneflow. It turns out that this is perhaps the most reliable - all the f4-ratio values are tiny, as they should be for a dataset without geneflow.

    Finally, we use visualisation heatmap in which the species in positions P2 and P3 are sorted on the horizontal and vertical axes, and the color of the corresponding heatmap cell indicates the most significant د-statistic found between these two species, across all possible species in P1. To prepare this plot, we need to prepare a file that lists the order in which the P2 and P3 species should be plotted along the heatmap axes. The file should look like plot_order.txt . You could prepare this file manually, or below is a programmatic way:

    Then make the plots using the scripts plot_d.rb and plot_f4ratio.rb .

    1.3.2 Do we find geneflow in data simulated with geneflow?

    How do the results for the simulation with geneflow differ from the above? Here we are going to run a similar set of analyses and make comparisons. We run Dsuite for the dataset with gene-flow as follows:

    Now we find 39 differences between the _tree.txt file and the _BBAA.txt , reflecting that, under geneflow, sister species often do not share the most derived alleles. Between _tree.txt file and the _Dmin.txt there are 124 differences.

    We can visualise the overlap between these different files using a Venn diagram. For example in R:

    Then we explore the results in the _BBAA.txt in R, analogously to how we did it above for the no-geneflow case:

    As you can see if you click above, the distributions of the statistics are markedly different when compared against the no-geneflow scenario. The number of D statistics >0.7 here is 85 (compared with 9 under no-geneflow) and very many trios now have significant p values - even after FDR correction, we have p<0.05 for whopping 671 trios. Finally, the f4-ratios are also elevated, up to almost 15% in some cases.

    To remind ourselves, the simulated tree and geneflow events are shown on the left. The 15% f4-ratios estimates correspond reasonably well with the strength of the geneflow events that we simulated (in the region of 8% to 18%). However, we simulated only five geneflow events and have 671 significant p values and 138 f4-ratio values above 3%. This is because the test statistics are correlated when trios share an (internal) branch in the overall population or species tree. Therefore, a system of all possible four taxon tests across a data set can be difficult to interpret. In any case (and with any methods) pinpointing specific introgression events in data sets with tens or hundreds of populations or species remains challenging - especially when genetic data is all the evidence we have.

    The scripts plot_d.rb and plot_f4ratio.rb were originally developed to help with such interpretation, and can still be useful. Because they take the maximum D or f4-ratio value between species in the P2 and P3 positions, across all possible species in P1, the plot deals with some of the correlated signals and redundancy in the data by focusing on the overall support for geneflow between pairs of species or their ancestors, which could have happened at any time in the past since the species in P2 and P3 positions diverged from each other.

    السؤال 3: How informative are the plots above? Can you identify the gene flow events from the plots?

    As an upgrade on the above plots we developed with Hannes Svardal, the f-branch or fb(C) metric (introduced in Malinsky et al. (2018). This is designed to disentangle correlated f4-ratio results and, unlike the matrix presentation above, f-branch can assign gene flow to specific, possibly internal, branches on a phylogeny. The f-branch metric builds upon and formalises verbal arguments employed by Martin et al. (2013), who used these lines of reasoning to assign gene flow to specific internal branches on the phylogeny of Heliconius butterflies.

    The logic of f-branch is illustated in the following figure. The panel (c) provides an example illustrating interdependences between different f4-ratio scores, which can be informative about the timing of introgression. In this example, different choices for the P1 population provide constraints on when the gene flow could have happened. (d) Based on relationships between the f4-ratio results from different four taxon tests, the f-branch, or fب statistic, distinguishes between admixture at different time periods, assigning signals to different (possibly internal) branches in the population/species tree

    This is implemented in the Dsuite Fbranch subcommand, and the plotting utility, called dtools.py is in the utils subfolder of the Dsuite package.

    The second command creates a file called fbranch.png , which is shown below.

    السؤال 4: Can you identify the gene flow events clearer here than from the matrix plots above? Is this a good showcase for the f-branch method?

    السؤال الخامس: If you exclude species with the strongest f4-ratio of f-branch signals, can you then get a correct phylogeny from PAUP*?

    السؤال 6: What happens when you re-run Dsuite with the inferred (wrong) tree from PAUP*?

    2. Finding specific introgressed loci - adaptive introgression in Malawi cichlids

    This exercise is based on analysis from the Malinsky et al. (2018) manuscript published in Nature Ecol. Evo.. The paper shows that two deep water adapted lineages of cichlids share signatures of selection and very similar haplotypes in two green-sensitive opsin genes (RH2Aβ and RH2B). The genes are located next to each other on scaffold_18. To find out whether these shared signatures are the result of convergent evolution or of adaptive introgression, we used the f_dM statistic. The f_dM is related to Patterson’s D and to the f4-ratio, but is better suited to analyses of sliding genomic windows. The calculation of this statistic is implemented in the program Dsuite Dinvestigate .

    The data for this exercise are in the data folder. It includes the VCF file with variants mapping to the scaffold_18 of the Malawi cichlid reference genome we used at the time - scaffold_18.vcf.gz . There are also two other files required to run Dinvestigate: the “SETS” file and the “test_trios” file. In this case they are called: MalawiSetsFile.txt and MalawiTestTriosForInvestigate.txt . The “TestTrios” file specifies that we want to investigate the admixture signal between the Diplotaxodon genus and the deep benthic group, compared with the mbuna group. The “SETS” file specifies which individuals belong to these groups. Finally, the command to execute the analysis is:

    The -w 50,25 option specifies that the statistics should be averaged over windows of 50 informative SNPs, moving forward by 25 SNPs at each step. The run should take a little under 10 minutes. We suggest you have a tea/coffee break while you wait for the results ).

    السؤال 7: What are the overall D and f_dM values over the entire scaffold_18? What does this suggest?

    The results are output by Dsuite into the file mbuna_deep_Diplotaxodon_localFstats__50_25.txt . A little R plotting function plotInvestigateResults.R is prepared for you. Use the script to load in the file you just produced (line 3) and plot the D statistic (line 6). Also execute line 8 of the script to plot the f_dM values. Do you see any signal near the opsin coordinates? We also plot the f_d statistic. As you can see, the top end of the plot is the same as for the f_dM, but the f_d is asymmetrical, extending far further into negative values.

    السؤال الثامن: Do you see any interesting signal in the D, f_dM, and f_d statistics? The opsin genes are located between 4.3Mb and 4.4Mb. Do you see anything interesting there?

    Click here to see the resulting R plots

    You could also plot the new d_f statistic? Doe that look any better?

    Finally, we zoom in at the region of the opsin genes (line 12). As you can see, the results look like a single “mountain” extending over 100kb.

    Click here to see the zoom in with `-w 50,25`

    But there is more structure than that in the region. Perhaps we need to reduce the window or step size to see a greater level of detai.

    They can be plotted with the same R script. Have a look at the results.

    Click here to see the zoom in with `-w 50,5`

    Click here to see the zoom in with `-w 50,1`

    Click here to see the zoom in with `-w 10,1`

    Click here to see the zoom in with `-w 2,1`

    السؤال 9: What combination of window size/step seems to have the best resolution? Why is the smallest window so noisy?

    السؤال 10: What happens if you plot individual data points, instead of a continuous line? Are the results clearer?

    Click here to see the zoom in with `-w 10,1` and individual data points

    3. Finding geneflow in a real dataset - Tanganyikan cichlids

    In this execise, we are going to see if we can reproduce the findings reported by Gante et al. (2016), with a different dataset. The Gante et al. dataset contained whole genome sequence data from five species from the cichlid genus Neolamprologus. The authors analysed these data and reported conclusions that are summarised by the figure below:

    A dataset containing these species, but also six additional Neolamprologus species (for a total of 11) was used in the tutorials on Species-Tree Inference with SNP Data and Divergence-Time Estimation with SNP Data.

    السؤال 11: Are the trees you reconstructed in these exercises consistent with the relationships reported by Gante et al.?

    Here we use data with 10 Neolamprologus species (the clearly hybrid Neolamprologus cancellatus removed), to reassess the evidence for geneflow within this genus with the f4-ratio and f-branch statistics. The genetic data are in NC_031969.vcf.gz , the file specifying sample->species relationships is NC_031969_sets.txt and the tree topology hypothesis is in SNAPP_tree.txt . We run the analysis for all possible trios as follows:

    This should finish in a couple of minutes. There are 'only' ten species, so 120 trios. Could this be manageable? Have a look at the output file TanganyikaCichlids/NC_031969_sets__tree.txt and see if you can interpret the results. Chances are that is is still too complex to interpret the results for the trios just by looking at them. Perhaps you can try the ‘f-branch’ method:

    Question 12: Are the geneflow signals seen here consistent with the Gante et al. figure?

    Question 13: What happens when we focus only on the five species from Gante et al. and exclude all others?

    Notice the -n option to dtools.py , to specify the output file name, making sure that our previous plots are not overwritten. Below is the plot, after a little editing in Inkscape.

    A very simple alternative way of investigating patterns of ancestry in potentially introgressed or hybrid species is to "paint" their chromosomes according to the genotypes carried at sites that are fixed between the presumed parental species. This type of plot, termed "ancestry painting" was used for example by Fu et al. (2015 Fig. 2) to find blocks of Neanderthal ancestry in an ancient human genome, by Der Sarkassian et al. (2015 Fig. 4) to investigate the ancestry of Przewalski's horses, by Runemark et al. (2018 Suppl. Fig. 4) to assess hybridization in sparrows, and by Barth et al. (2019 Fig. 2) to identify hybrids in tropical eels.

    If you haven't seen any of the above-named studies, you might want to have a look at the ancestry-painting plots in some of them. You may note that the ancestry painting in Fu et al. (2015 Fig. 2) is slightly different from the other two studies because no discrimination is made between heterozygous and homozygous Neanderthal alleles. Each sample in Fig. 2 of Fu et al. (2015) is represented by a single row of cells that are white or colored depending on whether or not the Neanderthal allele is present at a site. In contrast, each sample in the ancestry paintings of Der Sarkassian et al. (2015 Fig. 4), Runemark et al. (2018 Suppl. Fig. 4), and Barth et al. (2019 Fig. 2) is drawn with two rows of cells. However, as the analyses in both studies were done with unphased data, these two rows do not represent the two haplotypes per sample. Instead, the two cells per site were simply both colored in the same way for homozygous sites or differently for heterozygous sites without regard to haplotype structure.

    Here, we are going to use ancestry painting to investigate ancestry in Neolamprologus cancellatus ("neocan"), assuming that it is a hybrid between the parental species Altolamprologus fasciatus ("altfas") and Telmatochromis vittatus ("telvit"). As in Der Sarkassian et al. (2015 Fig. 4), Runemark et al. (2018 Suppl. Fig. 4), and Barth et al. (2019 Fig. 2), we are going to draw two rows per sample to indicate whether genotypes are homozygous or heterozygous.

    To generate an ancestry painting, we will need the data file NC_031969.f5.sub1.vcf.gz and will run two Ruby scripts. The first of these, get_fixed_site_gts.rb determines the alleles of the putative hybrid species at sites that are fixed differently in the two putative parental species. The second script, plot_fixed_site_gts.rb then uses the output of the first script to draw an ancestry painting. As the first script requires an uncompressed VCF file as input, first uncompress the VCF file for the SNP dataset with the following command:

    Then, run the Ruby script get_fixed_site_gts.rb to determine the alleles at sites that are fixed differently in the two parents. This script expects six arguments these are

    • the name of the uncompressed VCF input file, [ NC_031969.f5.sub1.vcf ,
    • the name of an output file, which will be a tab-delimited table,
    • a string of comma-separated IDs of samples for the first putative parent species,
    • a string of comma-separated IDs of samples for the putative hybrid species,
    • another string of comma-separated IDs of samples for the second putative parent species,
    • a threshold value for the required completeness of parental genotype information so that sites with too much missing data are discarded.

    We'll use NC_031969.f5.sub1.vcf as the input and name the output file pops1.fixed.txt . Assuming that the parental species are Altolamprologus fasciatus ("altfas") and Telmatochromis vittatus ("telvit") and the hybrid species is Neolamprologus cancellatus ("neocan"), we'll specify the sample IDs for these species with the strings "AUE7,AXD5", "JBD5,JBD6", and "LJC9,LJD1". Finally, we'll filter for sites without missing data by specifying "1.0" as the sixth argument. Thus, run the script get_fixed_site_gts.rb with the following command:

    The second script, plot_fixed_site_gts.rb , expects four arguments, which are

    • the name of the file written by script get_fixed_site_gts.rb ,
    • the name of an output file which will be a plot in SVG format,
    • a threshold value for the required completeness, which now applies not only to the parental species but also to the putative hybrid species,
    • the minimum chromosomal distance in bp between SNPs included in the plot. This last argument aims to avoid that the ancestry painting is overly dominated by high-divergence regions.

    We'll use the file pops1.fixed.txt as input, name the output file pops1.fixed.svg , require again that no missing data remains in the output, and we'll thin the remaining distances so that those plotted have a minimum distance of 1,000 bp to each other. Thus, use the following command to draw the ancestry painting:

    The screen output of this script will include some warnings about unexpected genotypes, these can be safely ignored as the script automatically excludes those sites. At the very end, the output should indicate that 6,069 sites with the required completeness were found, these are the sites included in the ancestry painting. Th output also reports, for all analyzed specimens, the heterozygosity at those 6,069 sites. For first-generation hybrids, this heterozygosity is expected to be close to 1.

    Open the file pops1.fixed.svg with a program capable of reading files in SVG format, for example with a browser such as Firefox or with Adobe Illustrator. You should see a plot like the one shown below.

    In this ancestry painting, the two samples of the two parental species are each drawn in solid colors because all included sites were required to be completely fixed and completely without missing data. The samples of Neolamprologus cancellatus, "LJC9" and "LJD1" are drawn in between, with two rows per sample that are colored according to genotypes observed at the 6,069 sites. Keep in mind that even though the pattern may appear to show phased haplotypes, this is not the case instead the bottom row for a sample is arbitrarily colored in red and the top row is colored in blue when the genotype is heterozygous.

    Question 14: Do you notice any surprising difference to the ancestry plots of Der Sarkassian et al. (2015 Fig. 4) and Runemark et al. (2018 Suppl. Fig. 4)?

    Click here to see the answer

    One remarkable difference compared to the ancestry painting of Der Sarkassian et al. (2015 Fig. 4) and Runemark et al. (2018 Suppl. Fig. 4) is that almost no homozygous genotypes are observed in the two samples of Neolamprologus cancellatus: the bottom rows are drawn almost entirely in red for the two putative hybrid individuals and the top rows are almost entirely in blue. The same pattern, however, can be found in Barth et al. (2019 Fig. 2).

    Question 15: How can this difference be explained?

    The fact that both Neolamprologus cancellatus samples are heterozygous for basically all sites that are differentially fixed in the two parental species can only be explained if both of these samples are in fact first-generation hybrids. If introgression would instead be more ancient and backcrossing (or recombination within the hybrid population) had occurred, we would expect that only certain regions of the chromosome are heterozygous while others should be homozygous for the alleles of one or the other of the two parental species. However, unlike in cases where the genomes have been sequenced of parent-offspring trios, we do not know who the actual parent individuals were. We can guess that the parent individuals were members of the species Altolamprologus fasciatus و Telmatochromis vittatus, but whether the parental individuals were part of the same population as the sampled individuals or a more distantly related population within these species remains uncertain.


    Programming Praxis

    We represent a point as a three-slot vector with the point number (on the range 0 to ن-1) in slot 0, x-coordinate in slot 1, and y-coordinate in slot 2. Here are convenience functions:

    (define (n p) (vector-ref p 0))
    (define (x p) (vector-ref p 1))
    (define (y p) (vector-ref p 2))

    A traveling salesman problem is a list of points. We make a problem with make-tsp :

    (define (make-tsp n)
    (define n10 (* n 10))
    (let loop ((n (- n 1)) (ps '()))
    (if (negative? n) ps
    (let ((p (vector n (randint n10) (randint n10))))
    (if (member p ps) (loop n ps)
    (loop (- n 1) (cons p ps)))))))

    We compute distances as they are used, caching them in a global variable dists , which is a two-dimensional matrix initialized in the main solving program. We store the distance twice, in both directions, because the space cost is very little (we allocate the entire matrix), and it saves us the trouble of figuring out a canonical direction:

    (define (dist a b)
    (define (square x) (* x x))
    (when (negative? (matrix-ref dists (n a) (n b)))
    (let ((d (sqrt (+ (square (- (x a) (x b)))
    (square (- (y a) (y b)))))))
    (matrix-set! dists (n a) (n b) d)
    (matrix-set! dists (n b) (n a) d)))
    (matrix-ref dists (n a) (n b)))

    Given a point p and a list of unvisited points ملاحظة, function nearest finds the nearest unvisited point:

    (define (nearest p ps)
    (let loop ((ps ps) (min-p #f) (min-d #f))
    (cond ((null? ps) min-p)
    ((or (not min-d) (< (dist p (car ps)) min-d))
    (loop (cdr ps) (car ps) (dist p (car ps))))
    (else (loop (cdr ps) min-p min-d)))))

    We are ready for the solver. Tsp initializes the dists matrix, then enters a loop in which it tracks both the current tour and the list of unvisited points at each step of the loop, it calculates the nearest neighbor, adds that point to the current tour and removes it from the list of unvisited points, and loops, stopping when the tour is complete. The initial point is always the first point in the input:

    (define (tsp ps)
    (let ((len (length ps)))
    (set! dists (make-matrix len len -1)))
    (let loop ((tour (list (car ps))) (unvisited (cdr ps)))
    (if (null? unvisited) tour
    (let ((next (nearest (car tour) unvisited)))
    (loop (cons next tour) (remove next unvisited))))))

    Here we compute the cost of the tour:

    (define (cost tour)
    (if (or (null? tour) (null? (cdr tour))) 0
    (let ((start (car tour)))
    (let loop ((tour tour) (sum 0))
    (if (null? (cdr tour))
    (+ sum (dist (car tour) start))
    (loop (cdr tour) (+ sum (dist (car tour) (cadr tour)))))))))


    شاهد الفيديو: Trigonometric ratio Exercise= (شهر اكتوبر 2021).